Laravel 通过 BelongsToMany 关系删除

Atn*_*ize 1 php laravel

我有一Task堂课。并且该表的每条记录可以有一个或多个子项,并且可以是另一个任务的一个或多个父项。

表任务

id | name 
Run Code Online (Sandbox Code Playgroud)

表tasks_links

parent_id | child_id
Run Code Online (Sandbox Code Playgroud)

任务模型

<?php

namespace App;

class Task extends Model
{    
    public function childs()
    {
        return $this->belongsToMany(Task::class, 'tasks_links',  'parent_id','child_id');
    }

    public function parents()
    {
        return $this->belongsToMany(Task::class, 'tasks_links' , 'child_id' , 'parent_id');
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器和视图中,我可以使用这样的关系

Task::find($id)->parents(); //Return an array
Run Code Online (Sandbox Code Playgroud)

当我删除一个任务时,我也会删除与其他相关任务的链接

所以以下工作:

\DB::table('tasks_links')->where('parent_id' , $task->id)->delete();
\DB::table('tasks_links')->where('child_id' , $task->id)->delete();
Run Code Online (Sandbox Code Playgroud)

但我以下不起作用

foreach ($task->parents() as $parent) {
        $parent->delete();
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法links通过使用parents和childs函数而不是直接在数据库中搜索来删除?

Zul*_*riq 5

$task =Task::find($id); 
$task->childs()->detach();
$task->parents()->detach();    
$task->delete();
Run Code Online (Sandbox Code Playgroud)