laravel - 如何使用 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 并创建一个用户,然后我试图将用户附加到数据透视表中的机器上。任何帮助和指针表示赞赏。
解决方案
$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.
推荐阅读
- c# - 无法弄清楚为什么我的“登录”类什么都不返回
- swift - SwiftUI - 仅设置一次状态变量后,警报显示两次
- .net - .net 核心 httpclient 处理带有附加文件的响应
- c# - 我可以在 C#/VS2019 中找到变量的引用及其映射的引用吗?
- python-3.x - 为什么 sklearn.metrics.silhouette_score 对于稀疏矩阵输入这么慢?
- python - sum = (1**2) + (2**2) - (3**2) + (4**2)-,...,+(n**2) python中的程序代码
- ruby-on-rails - 无法注销 Rails 应用程序设计给出错误找不到路径“/tuners/sign_out”的设计映射
- c++ - 停止不断增加的无限递归模板实例化,这是不需要的
- vb.net - vb.net 以编程方式添加事件处理程序
- python - 对多个时间序列进行分组和聚合