我們經常會遇到這個需求,文章表和評論表是單獨的表,一篇文章對應多條評論,那麼在刪除一篇文章的同時應該把對應的評論也刪掉。今天記錄一種 Laravel ORM 操作中的事件鉤子的方式來完成這個操作。
刪除動作我們通常這樣實現:
public function destroy(LetterMsg $letter)
{
$letter->delete();
return $this->Success();
}
現在加入以下內容:
<?php
namespace App\Http\Model;
use Illuminate\Database\Eloquent\Model;
class LetterMsg extends Model
{
public function replies(){
return $this->hasMany(LetterReply::class,'msg_id');
}
public static function boot()
{
parent::boot(); // TODO: Change the autogenerated stub
static::deleting(function ($letterMsg){
$letterMsg->replies()->delete();
});
}
}
首先需要在model類中定義模型關聯
然後繼承並實現boot方法註冊deleting事件,使用回調執行相應的動作。
這樣刪除動作只需要一處代碼維護。