我有一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函数而不是直接在数据库中搜索来删除?
$task =Task::find($id);
$task->childs()->detach();
$task->parents()->detach();
$task->delete();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4913 次 |
| 最近记录: |