Maison >cadre php >Laravel >laravel a été supprimé après la mise à jour

laravel a été supprimé après la mise à jour

WBOY
WBOYoriginal
2023-05-20 20:02:05543parcourir

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的软删除功能。

要使用软删除功能,我们需要向模型添加SoftDeletestrait,并在数据库中添加一个名为deleted_atdatetime类型的列。当使用deletedestroy方法从数据库中删除一个记录时,该记录将被标记为已删除,并将deleted_at字段设置为当前时间戳。标记为已删除的记录不会在查询中返回,但它们仍然存在于数据库中。

除了deletedestroy方法之外,Laravel还提供了许多其他的软删除方法,例如forceDeleterestoreforceDelete方法可以永久删除软删除的记录,而restore方法可以将软删除的记录恢复到数据库中。

Laravel更新软删除后的变化

当Laravel 7更新到Laravel 8时,软删除功能发生了一些变化。在Laravel 8中,软删除行为的默认值从“保留”更改为“删除”。

换句话说,在Laravel 8中,当您调用deletedestroy方法时,记录将被永久删除,而不是像以前版本中那样被标记为已删除。这将导致您无法恢复已删除的记录,并且如果您的应用程序依赖于软删除功能,则可能会出现意外的错误。

解决方法

如果您的应用程序依赖于软删除功能,那么您必须在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字段进行查询,请确保您的代码正确处理该字段的值。

最后,如果您之前使用的是deletedestroy方法,并且希望继续使用软删除功能,请修改您的代码,以便使用softDeletesoftDeletes方法,并引用SoftDeletestrait,如下所示:

class MyController extends Controller
{
    public function delete($id)
    {
        $record = MyModel::find($id);
        $record->softDelete(); // 使用 softDelete 方法
        // ...
    }
}

在上面的例子中,我们使用了softDelete方法来软删除记录。如果您要删除多条记录,请使用softDeletes

Pour utiliser la fonction de suppression logicielle, nous devons ajouter le trait 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 Laravel

Lorsque 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn