Database 透视表是否可能与另一个表有多对多关系?
假设有一个Database 透视表是否可能与另一个表有多对多关系?,database,laravel,eloquent,Database,Laravel,Eloquent,假设有一个任务表和一个用户表。一项任务可以通过user\u taskpivot表分配多个用户,pivot表中有一个字段is\u done,该字段指示分配的用户是否已完成任务。到目前为止还不错 现在假设还有一个子任务表,每个任务可以有多个子任务 现在,如果我们还想为每个分配的用户保存分配给他们的子任务,例如在user\u task\u子任务表中 因此,所有表都希望这样: user: [id, name] task: [id, title] subtask: [id, title, task_id]
任务
表和一个用户
表。一项任务可以通过user\u task
pivot表分配多个用户,pivot表中有一个字段is\u done
,该字段指示分配的用户是否已完成任务。到目前为止还不错
现在假设还有一个子任务
表,每个任务可以有多个子任务
现在,如果我们还想为每个分配的用户保存分配给他们的子任务,例如在user\u task\u子任务
表中
因此,所有表都希望这样:
user: [id, name]
task: [id, title]
subtask: [id, title, task_id]
user_task: [id, user_id, task_id, is_done]
user_task_subtask: [user_task_id, subtask_id]
使用eloquent,我假设我可以键入类似于$task->users()->where('user_id',1)->pivot->subtask
的内容来访问用户1针对该特定任务的所有子任务。我试过这个:
class Task extends Model
{
public function users()
{
return $this
->belongsToMany(User::class)
->as('userdetails')
->withPivot('is_done')
->using(UserTaskDetails::class);
}
}
然后在轴上添加一个额外的关系:
class UserTaskDetails extends Pivot
{
public function subtasks()
{
$this->belongsToMany(Subtask::class, 'user_task_subtask', ...); // <-- what to write here exactly?
}
}
类UserTaskDetails扩展了Pivot
{
公共函数子任务()
{
$this->belongTomany(子任务::类,'user\u task\u Subtask',…)这是个坏主意,我会使用父任务id
的概念,而不是一个单独的表。因此任务
表将包含另一个名为父任务id
的字段,你是什么意思?子任务
已经有一个字段任务id
。但我还需要存储哪个用户是assi指定到哪个子任务。这就是为什么我也需要作为用户任务\u子任务的原因。这正是我要说的,你不需要创建另一个表,你可以使用任务表作为子任务唯一的区别是你可以将父任务id
字段添加到任务表中