[英]How to delete multi relationship Model in Laravel 5.5
我有3張桌子
圖書 :-ID-名稱-Deleted_at
帖子 :-id-book_id-內容-Deleted_at
評論 :-id-post_id-評論-Deleted_at
一本書有很多帖子,一則帖子有很多評論。
刪除圖書時,我想刪除與該圖書相關的帖子和評論。 我已經在所有模型中添加關系,所有表都使用SoftDelete,並嘗試在Laravel中使用Event
// Book Model
protected static function boot() {
parent::boot();
static::deleting(function($book) {
$book->posts()->delete();
});
}
// Post Model
protected static function boot() {
parent::boot();
static::deleting(function($post) {
$post->comments()->delete();
});
}
當我嘗試刪除一本書時:
$book = Book:find($bookId);
$book->delete()
書籍和帖子,已刪除,但評論未刪除。 我可以使用Laravel Event刪除評論嗎? 感謝您的閱讀!
您將在Post
模型的delete事件內傳遞一個不同的變量。
// Post Model
protected static function boot() {
parent::boot();
static::deleting(function($post) {
// $book->comments()->delete();
$post->comments()->delete();
});
}
您應該將模型關系的ON DELETE觸發器設置為CASCADE。 否則,您將需要迭代相關記錄並單獨刪除它們。
$model->related->each(function ($related) { $related->delete(); });
編輯:您對模型事件有正確的主意,但請先刪除帖子,然后向后退到書籍
protected static function boot() {
parent::boot();
static::deleting(function($post) {
$post->comments()->delete();
});
}
確保所有模型都具有軟刪除特征和日期屬性:
use SoftDeletes;
protected $dates = ['deleted_at'];
您可以使用michaeldyrynda制作的這種巧妙的小特征,稱為laravel-cascade-soft-deletes。
GitHub自述文件中的示例代碼:
<?php
namespace App;
use App\Comment;
use Iatstuti\Database\Support\CascadeSoftDeletes;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Post extends Model
{
use SoftDeletes, CascadeSoftDeletes;
protected $cascadeDeletes = ['comments'];
protected $dates = ['deleted_at'];
public function comments()
{
return $this->hasMany(Comment::class);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.