[英]Laravel relationships hasMany updateOrCreate array
我有User
模型,它与hasMany
与UserPosition
eloquent 模型有关系:
用户模型
public function positions()
{
return $this->hasMany(UserPosition::class);
}
当来自请求的数据位置array
时,如何使用updateOrCreate
方法?
代码
$positions = [
"doctor",
"developer"
];
$user->positions()->each(function($position) use ($positions, $user) {
$id = $user->id;
foreach ($positions as $name) {
$position->updateOrCreate(['user_id' => $id, 'name' => $name], [
'name' => $name
]);
}
});
注意:在这个例子中,用户在数据库表上没有任何位置
但我的代码不起作用。 为什么?
您正在迭代用户的现有职位,这意味着如果用户没有职位,则迭代将永远不会发生。 您可以沿着您需要的位置进行迭代:
$positions = collect([
"doctor",
"developer"
]);
$positions->each(function($position) use ($user) {
$user->positions()->updateOrCreate(['name' => $position], [
'name' => $position
]);
}
});
它不起作用,因为您在每次迭代中运行updateOrCreate()
方法,该方法从未运行,因为正如您在注释中所述“此示例用户在数据库表上没有任何位置”
在这里,您尝试遍历附加到用户模型的当前现有职位:
$user->positions()->each()
但这不会运行,因为用户目前没有任何职位。
我猜您正在尝试更新用户的职位,在这种情况下,用户可能已经拥有一个或多个与他相关的职位,并且您不想创建重复项,为此您可以这样做:
$positions = [
"doctor",
"developer"
];
foreach($positions as $position) {
UserPosition::firstOrCreate(['user_id' => $user->id, 'name' => $position]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.