【问题标题】:Is it possible for a pivot table to have a many-to-many relationship with yet another table?数据透视表是否可以与另一个表建立多对多关系?
【发布时间】:2020-09-17 03:36:38
【问题描述】:

假设有一个tasks 表和一个user 表。一个任务可以通过user_task 数据透视表分配多个用户,该数据透视表有一个字段is_done,用于告知分配的用户是否已完成该任务。到目前为止一切顺利。

现在假设还有一个subtasks 表,每个任务可以有多个子任务。

现在,如果我们还想为每个分配的用户保存他们被分配到的子任务,例如在user_task_subtask 表中。

所以所有的表格都会是这样的:

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->subtasks 之类的内容来访问用户 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?
    }
}

但我无法让这个subtasks 关系正常工作。谁能帮帮我?

【问题讨论】:

    标签: database laravel eloquent


    【解决方案1】:

    这是一个坏主意,我会为subtasks 使用parent_id 概念而不是单独的表。所以tasks 表将包含另一个名为parent_id 的字段。

    【讨论】:

    • 什么意思? subtask 已经有一个字段 task_id。但我还需要存储分配给哪个子任务的用户。所以这就是为什么我也需要user_task_subtask
    • 这就是我所说的你不需要创建另一个表你可以使用tasks表作为subtasks唯一的区别是你可以将parent_id字段添加到@987654331 @表
    猜你喜欢
    • 2018-11-24
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2019-11-07
    • 2020-03-23
    • 1970-01-01
    • 2018-09-23
    • 2016-02-02
    相关资源
    最近更新 更多