簡體   English   中英

laravel5.2 刪除所有關系的模型

[英]laravel5.2 delete model with all relations

我現在的模型有一些關系。 如果模型將被刪除,我該如何刪除它們? 此查詢不會刪除相關模型,只會刪除“主模型”。

我使用此代碼調用:

$checks = Check::where('created_at','<=', Carbon::now()
                 ->subHours(3))
                 ->with('checks')
                 ->with('results')
                 ->delete();

這是我當前的 Check 模型

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

    static::deleting(function($check) {
        $check->checks()->delete();
        $check->results()->delete();
    });
}

結果和檢查包含每個檢查的多個條目。 這意味着使事情清楚:

一張支票可能有 n 個CheckResult ,也可能有 n 個CheckProcedure (我當然也會刪除所有這些)。

嘗試使用deleted而不是deleting

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

    static::deleted(function($check)
    {
        $check->checks()->delete();
        $check->results()->delete();
    });
}

還嘗試從返回的集合中逐個解析對象:

foreach($check->checks as $check_object) {
    $check_object->delete();
}

希望這可以幫助。

就像評論中已經指出的那樣,您正在查詢構建器而不是實際相關模型上執行刪除。 IE

你應該有

$check->checks->delete();
$check->results->delete();

而不是你目前擁有的。

此外,假設您使用的是關系數據庫,正確的做法是使用外鍵和級聯刪除操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM