Laravel 中利用『模型事件』來實現刪除資料時的連帶刪除

vinhson發表於2018-11-23

刪除一條資料庫記錄的時候希望能自動刪除這條記錄關聯的其它資料,如刪除使用者後連帶刪除其建立的文章和圖片。
1、可以用Eloquent的deleting事件來實現:

class WheelActivity extends Model
{
    public function awards() {
        return $this->hasMany('App\Model\WheelAward', 'wheel_activity_id', 'id');
    }

    protected static function boot()
    {
        parent::boot();

        static::deleting(function($wheelactivity){
            $wheelactivity->awards()->delete();
        });
    }

    **注:** 在控制器中刪除時必須使用first()查詢,否則無效。
    example:WheelActivity::where('id', $id)->first()->delete();
}

2、在控制其中直接刪除

    $user = User::find($id);
    $user->photos()->delete();   //  刪除關聯表的資料
    $user->delete();             //  刪除主表資料

3、在AppServiceProvider 監聽模型事件(不建議)

    public function boot()
    {
        WheelActivity::deleting(function($wheelactivity){
            $wheelactivity->awards()->delete();
        });
    }

4、使用事物(自己腦補吧,這裡不做具體說明)。

部落格地址:http://blog.jstm365.com

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要輕易放棄。學習成長的路上,我們長路漫漫,只因學無止境 Don't give up easily. On the way of learning and growing up, we have a long way to go, just because there is no end to learning.

相關文章