首页 > 解决方案 > 如何使用 Eloquent 在数据透视表中插入多行?

问题描述

我有一个称为user_machine_pivot连接两个表的数据透视表:user& machines,当创建一个新用户时,我从下拉列表中选择他可以操作的机器。我想要实现的是,当我提出axios.post请求时,我想使用user_id&在数据透视表中插入多行machine_id。这是我的用户模型代码:

public function machine()
{
    return $this->belongsToMany(Machine::class, 'user_machine_pivot')->withTimestamps();
}

axios.post来自 Telescope 的请求内容:{

full_name: "RandomName",
username: "RandomName",
password: "********",
machines: [
3,
2
]
}

我的用户控制器:

$user = User::create($validatedUserData);
$user->machine()->attach($user->id, ['machine_id' => $machines]);

首先,我正在验证 UserData 并创建一个用户,然后我试图将用户附加到数据透视表中的机器上。任何帮助和指针表示赞赏。

标签: laraveleloquentpivot-table

解决方案


$user->machine()->attach($user->id, ['machine_id' => $machines]);

那是不对的。你已经有了$user,并且你想附加一个特定的machine,所以你需要将该 id 传递给machines()->attach()

$user = User::create($validatedUserData);
$machine = ...; 
// Not sure how you're getting `$machines`, and it should be singular `$machine`

$user->machines()->attach($machine->id, [...]);
// Replace `[...]` with any additional columns.

请注意,如果要附加多个,请使用attach()or sync()

$user->machines()->attach($machines);
$user->machines()->sync($machines); 

attach()如果您附加了现有记录,则最好使用,sync()然后detach()您将通过。此外,如果您需要其他列,请将您的列调整为关联数组:attach()ids$machines

$machines = [
  1,
  2 => ["additional" => "column"],
  3
]; // Etc. etc.

推荐阅读