1. ホーム
  2. php

[解決済み] Laravelで関連する行を自動で削除する(Eloquent ORM)

2022-04-23 05:42:47

質問

この構文で行を削除する場合。

$user->delete();

コールバックのようなものを付けて、例えばこれを自動的に行うような方法はないでしょうか。

$this->photo()->delete();

モデルクラスの内部が望ましい。

どのように解決するのですか?

これはEloquentイベントの完璧なユースケースだと思います( http://laravel.com/docs/eloquent#model-events ). delete"イベントを使用して、クリーンアップを行うことができます。

class User extends Eloquent
{
    public function photos()
    {
        return $this->has_many('Photo');
    }

    // this is a recommended way to declare event handlers
    public static function boot() {
        parent::boot();

        static::deleting(function($user) { // before delete() method call this
             $user->photos()->delete();
             // do the rest of the cleanup...
        });
    }
}

また、参照整合性を確保するために、全体をトランザクション内に配置する必要があるでしょう。