【问题标题】:Laravel Pivot Table Insert ArrayLaravel 数据透视表插入数组
【发布时间】:2020-09-19 13:57:48
【问题描述】:

我不确定 tasks_assigned_too_groups 表的关系, 我的数据库如下:

tasks
id | task_name | task_description

groups
id | group_name | user_id

tasks_assigned_too_groups
id | tasks_id | group_name

在您创建任务并将其指定给组的形式中,然后我想创建如下:

 public function store() {

        $data = request()->validate([
           'task_title' => '',
           'task_description' => '',
           'start_date' => '',
            'due_date' => '',
            'group_name' => '',
        ]);

// insert in to tasks database table...
        $task = request()->user()->tasks()->create([
            'task_title' => $data['task_title'],
            'task_description' => $data['task_description'],
            'start_date' => $data['start_date'],
            'due_date' => $data['due_date'],
        ]);

// insert into tasks_assigned_too_groups database table...
        $task->setforgroups()->attach($data['group_name']);

        return new TasksResource($task);
    }

$data['group_name'] 是一个数组,如下所示:

[
  {
    "group_name": "9x/En3"
  },
  {
    "group_name": "10x/En3"
  }
]

如何将已分配的 task_id 和 group_name 插入到 tasks_assigned_too_groups 表中?

【问题讨论】:

  • 您在数据透视表中使用group_name 属性作为外键是否有任何具体原因?我建议不要这样做。但无论如何,假设您已正确设置所有键和关系,只需调用 attach($keys) 并使用 $keys 作为您要分配的外键的数组/集合,它应该可以正常工作。
  • @D.Petrov,这成功插入了 group_name 但没有插入 task_id?

标签: database laravel eloquent relationship


【解决方案1】:

尝试改变这一点

 tasks
 id | task_name | task_description

 groups
 id | group_name | user_id

 tasks_assigned_too_groups
 id | tasks_id | group_name

对此:

 tasks
 id | task_name | task_description

 groups
 id | group_name | user_id

 tasks_assigned_too_groups
 id | tasks_id | group_id

因为这是 ManyToMany 关系,并且 intermediary(pivot) 表需要有两个连接表的外键。

任务模型

public function groups()
{
    return $this->belongsToMany('App\Group');
}

模型

public function tasks()
{
    return $this->belongsToMany('App\Task');
}

这里是更多信息的文档。 laravel.com

【讨论】:

  • 谢谢,我从 api 获取组表,其中每个用户都分配给一个 group_name,所以我的想法是将 group_name 保留为唯一 id?
  • 我建议组表的唯一id是id列,group_name在某些情况下不是唯一的。因此,您可以通过在 User 模型中添加关系来获取组的成员。例如:$group = Group::with('users')->find($group_id);
猜你喜欢
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 2016-12-26
相关资源
最近更新 更多