Laravel est un framework de développement PHP populaire largement utilisé dans le développement d'applications Web. Il fournit de nombreuses fonctionnalités pratiques, telles que l'ORM, le contrôle de routage, le moteur de modèles, etc., rendant le développement d'applications Web facile et agréable. Parmi elles, la fonction de suppression logicielle de Laravel est l'une des fonctionnalités les plus populaires. Cet article présentera les modifications apportées à la suppression logicielle après la mise à jour de Laravel et ses solutions.
Fonction de suppression logicielle de Laravel
Dans Laravel, si nous voulons supprimer un enregistrement, nous pouvons utiliser la méthode delete
ou la méthode destroy
. Cependant, si nous souhaitons que l'enregistrement soit marqué comme supprimé plutôt que complètement supprimé, nous devons utiliser la fonction de suppression logicielle de Laravel. delete
方法,也可以使用destroy
方法。但是,如果我们希望该记录被标记为已删除而不是完全删除,我们应该使用Laravel的软删除功能。
要使用软删除功能,我们需要向模型添加SoftDeletes
trait,并在数据库中添加一个名为deleted_at
的datetime
类型的列。当使用delete
或destroy
方法从数据库中删除一个记录时,该记录将被标记为已删除,并将deleted_at
字段设置为当前时间戳。标记为已删除的记录不会在查询中返回,但它们仍然存在于数据库中。
除了delete
和destroy
方法之外,Laravel还提供了许多其他的软删除方法,例如forceDelete
和restore
。forceDelete
方法可以永久删除软删除的记录,而restore
方法可以将软删除的记录恢复到数据库中。
Laravel更新软删除后的变化
当Laravel 7更新到Laravel 8时,软删除功能发生了一些变化。在Laravel 8中,软删除行为的默认值从“保留”更改为“删除”。
换句话说,在Laravel 8中,当您调用delete
或destroy
方法时,记录将被永久删除,而不是像以前版本中那样被标记为已删除。这将导致您无法恢复已删除的记录,并且如果您的应用程序依赖于软删除功能,则可能会出现意外的错误。
解决方法
如果您的应用程序依赖于软删除功能,那么您必须在Laravel 8中采取一些额外的步骤来确保软删除功能按预期工作。
首先,您需要在模型中显式定义软删除行为。在您的模型中,您应该定义booted
方法,并调用static::deleted
方法来定义模型的软删除行为,如下所示:
use IlluminateDatabaseEloquentSoftDeletes; class MyModel extends Model { use SoftDeletes; protected static function booted() { static::deleted(function ($model) { // Handle soft deletion }); } }
在上面的例子中,我们使用deleted
方法来定义模型的软删除行为。当模型被软删除时,将调用传递给deleted
方法的闭包函数。
在这个函数中,您可以编写任何您希望在软删除时执行的代码。例如,在创建软删除记录时,您可以在模型中设置其他属性,或者在第三方服务中通知其他应用程序。
其次,您需要在您的应用程序中确保所有使用软删除的地方都已正确调整。例如,如果您在代码中使用了deleted_at
字段进行查询,请确保您的代码正确处理该字段的值。
最后,如果您之前使用的是delete
或destroy
方法,并且希望继续使用软删除功能,请修改您的代码,以便使用softDelete
或softDeletes
方法,并引用SoftDeletes
trait,如下所示:
class MyController extends Controller { public function delete($id) { $record = MyModel::find($id); $record->softDelete(); // 使用 softDelete 方法 // ... } }
在上面的例子中,我们使用了softDelete
方法来软删除记录。如果您要删除多条记录,请使用softDeletes
SoftDeletes
au modèle et ajouter un type datetime
appelé deleted_at
dans la base de données. Liste. Lorsqu'un enregistrement est supprimé de la base de données à l'aide de la méthode delete
ou destroy
, l'enregistrement est marqué comme supprimé et le champ deleted_at
est défini sur The horodatage actuel. Les enregistrements marqués comme supprimés ne sont pas renvoyés dans la requête, mais ils existent toujours dans la base de données. En plus des méthodes delete
et destroy
, Laravel fournit également de nombreuses autres méthodes de suppression logicielle, telles que forceDelete
et restore<.>. La méthode <code>forceDelete
peut supprimer définitivement les enregistrements supprimés de manière logicielle, et la méthode restore
peut restaurer les enregistrements supprimés de manière logicielle dans la base de données. Changements après la suppression logicielle de la mise à jour de LaravelLorsque Laravel 7 a été mis à jour vers Laravel 8, quelques modifications ont été apportées à la fonctionnalité de suppression logicielle. Dans Laravel 8, la valeur par défaut du comportement de suppression logicielle est passée de « conserver » à « supprimer ». 🎜🎜En d'autres termes, dans Laravel 8, lorsque vous appelez la méthode delete
ou destroy
, l'enregistrement sera définitivement supprimé au lieu d'être marqué comme supprimé. Cela vous empêchera de récupérer les enregistrements supprimés et pourrait provoquer des erreurs inattendues si votre application s'appuie sur la fonctionnalité de suppression logicielle. 🎜🎜Solution de contournement🎜🎜Si votre application repose sur la fonctionnalité de suppression logicielle, vous devez alors prendre quelques mesures supplémentaires dans Laravel 8 pour vous assurer que la fonctionnalité de suppression logicielle fonctionne comme prévu. 🎜🎜Tout d’abord, vous devez définir explicitement le comportement de suppression logicielle dans votre modèle. Dans votre modèle, vous devez définir la méthode booted
et appeler la méthode static::deleted
pour définir le comportement de suppression logicielle du modèle comme ceci : 🎜rrreee🎜 ci-dessus Dans l'exemple, nous utilisez la méthode deleted
pour définir le comportement de suppression logicielle du modèle. Lorsqu'un modèle est supprimé de manière logicielle, la fonction de fermeture passée à la méthode deleted
est appelée. 🎜🎜Dans cette fonction, vous pouvez écrire n'importe quel code que vous souhaitez exécuter lors d'une suppression logicielle. Par exemple, lors de la création d'un enregistrement supprimé de manière réversible, vous pouvez définir des propriétés supplémentaires dans le modèle ou avertir d'autres applications dans un service tiers. 🎜🎜Deuxièmement, vous devez vous assurer que tous les endroits de votre application qui utilisent la suppression logicielle sont correctement réglés. Par exemple, si vous effectuez une requête en utilisant le champ deleted_at
dans votre code, assurez-vous que votre code gère correctement la valeur de ce champ. 🎜🎜Enfin, si vous utilisiez auparavant la méthode delete
ou destroy
et que vous souhaitez continuer à utiliser la fonctionnalité de suppression logicielle, veuillez modifier votre code pour utiliser softDelete
code> ou softDeletes
, et référencez le trait SoftDeletes
, comme indiqué ci-dessous : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la méthode softDelete
pour enregistrements de suppression logicielle. Si vous souhaitez supprimer plusieurs enregistrements, utilisez la méthode softDeletes
. 🎜🎜Conclusion🎜🎜La suppression logicielle est une fonctionnalité très pratique dans Laravel, mais dans Laravel 8, son comportement a changé. Pour garantir que la fonctionnalité de suppression logicielle fonctionne comme prévu, vous devez définir explicitement le comportement de suppression logicielle dans votre modèle et effectuer les ajustements appropriés dans votre application où la suppression logicielle est utilisée. 🎜🎜Assurez-vous d'être parfaitement préparé avant de mettre à jour votre version de Laravel et vérifiez si la fonctionnalité de suppression logicielle fonctionne toujours comme prévu après la mise à jour. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!