laravelは更新後にソフト削除されました

WBOY
リリース: 2023-05-20 20:02:05
オリジナル
505 人が閲覧しました

Laravel は、Web アプリケーションの開発で広く使用されている人気のある PHP 開発フレームワークです。 ORM、ルーティング制御、テンプレートエンジンなどの便利な機能を多数備えており、Webアプリケーション開発を簡単かつ楽しく行えます。その中でも、Laravelのソフトデリート機能は最も人気のある機能の1つです。この記事では、Laravelアップデート後のソフトデリートの変更点とその解決策を紹介します。

Laravel のソフト削除機能

Laravel では、レコードを削除したい場合、delete メソッドまたは destroy メソッドを使用できます。ただし、レコードを完全に削除するのではなく、削除済みとしてマークしたい場合は、Laravel の論理的な削除機能を使用する必要があります。

論理的な削除機能を使用するには、SoftDeletes 特性をモデルに追加し、deleted_at という名前の datetime タイプをモデルに追加する必要があります。列のデータベース。 delete または destroy メソッドを使用してデータベースからレコードが削除されると、レコードは削除済みとしてマークされ、 deleted_at フィールドは現在のタイムスタンプに設定されます。削除済みとしてマークされたレコードはクエリでは返されませんが、データベースにはまだ存在します。

delete および destroy メソッドに加えて、Laravel は、forceDeleterestore など、他の多くのソフト削除メソッドも提供します。 forceDelete メソッドは論理的に削除されたレコードを完全に削除でき、restore メソッドは論理的に削除されたレコードをデータベースに復元できます。

Laravel アップデート後のソフトデリートの変更点

Laravel 7 が Laravel 8 にアップデートされた際に、ソフトデリート機能にいくつかの変更が発生しました。 Laravel 8では、論理的な削除動作のデフォルト値が「keep」から「remove」に変更されました。

つまり、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 メソッドに渡されたクロージャー関数が呼び出されます。

この関数では、論理的な削除時に実行したい任意のコードを記述することができます。たとえば、論理的に削除されたレコードを作成する場合、モデルに追加のプロパティを設定したり、サードパーティ サービスの他のアプリケーションに通知したりできます。

2 番目に、論理的な削除を使用するアプリケーション内のすべての場所が正しく調整されていることを確認する必要があります。たとえば、コード内で deleted_at フィールドを使用してクエリを実行する場合は、コードがそのフィールドの値を正しく処理していることを確認してください。

最後に、以前に delete または destroy メソッドを使用していて、引き続き論理的な削除機能を使用したい場合は、softDelete を使用するようにコードを変更してください。 または softDeletes メソッドを使用し、以下に示すように SoftDeletes トレイトを参照します。

class MyController extends Controller
{
    public function delete($id)
    {
        $record = MyModel::find($id);
        $record->softDelete(); // 使用 softDelete 方法
        // ...
    }
}
ログイン後にコピー

上記の例では、softDeleteMethod を使用して、レコードをソフト削除します。複数のレコードを削除する場合は、softDeletes メソッドを使用します。

結論

Laravelではソフトデリートは非常に便利な機能ですが、Laravel 8では動作が変更されました。論理的な削除機能が期待どおりに動作することを確認するには、モデルで論理的な削除の動作を明示的に定義し、論理的な削除が使用されるアプリケーションで適切な調整を行う必要があります。

Laravel バージョンを更新する前に、十分な準備ができていることを確認し、更新後も論理的な削除機能が期待どおりに動作するかどうかを確認してください。

以上がlaravelは更新後にソフト削除されましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート