Laravel updateOrCreate 与 hasMany 关系
Posted
技术标签:
【中文标题】Laravel updateOrCreate 与 hasMany 关系【英文标题】:Laravel updateOrCreate with hasMany relationship 【发布时间】:2021-09-24 08:26:17 【问题描述】:我的用户可以有多个参数。例如,它们被称为 user_param_1、user_param_2、...、user_param_n。这是动态的。它是一个单独的表 user_parameters,其中存储了 id、user_id、name 和 value。 Users 和 UserParameters 之间的关系是 belongsTo 和 hasMany。问题是:
编辑时,我想动态保持它,如果用户有一个 user_param_n+1,它应该被创建。但是我已经无法为现有参数编写条件了。
我自己创建了一个 userParameters 数组,它只包含来自 $request 变量的必要参数。数组如下所示:
[
0 => [
"name" => "par1"
"value" => "var1"
]
1 => [
"name" => "par2"
"value" => "var2"
]
2 => [
"name" => "par3"
"value" => "var3"
]
]
然后我想保存它。我的控制器知道用户,所以我可以访问 $user->id。
foreach ($userParameters as $userParameter)
$user->parameters()->updateOrCreate(['id' => $user->parameters->id, 'user_id' => $user->id], $userParameter);
问题是,$user->parameters 是一组雄辩的模型。条件不对。我无法直接访问 id。但是我该如何解决呢?我需要像“['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]”这样的东西......但是如何以一种雄辩的方式?
提前致谢!
最好的问候
【问题讨论】:
【参考方案1】:我认为您需要使用 user_id 和 parameter_name 获取现有参数,因为这是该参数行的唯一性,如果没有具有此名称的参数,它将使用 user_id & parameter_name 和 parameter_value 传递给 updateOrCreate 函数来创建它
foreach ($parameters_from_request as $parameter)
$user->parameters()
->updateOrCreate(
[
'name' => $parameter['name] ,
'user_id' => $user->id
],[
'name' => $parameter['name'],
'value'=> $parameter['value']
]);
【讨论】:
但是我不会有同样的问题吗?如何访问参数名称,如“$user->parameters->name”?参数仍然是一个雄辩的模型数组,因为一个用户有很多参数。即使使用像 $par = UserParameter::where('user_id', $user->id) 这样的单独查询,我也会得到一个数组,所以我不能使用 ['name' => $par->name] 啊,是的!我的错。我已经有了名字。是的,这似乎是正确的。我稍后会测试它,因为我现在不在 PC 上。谢谢! 那很好,我会等待你的认可,别忘了给答案点赞 ;)以上是关于Laravel updateOrCreate 与 hasMany 关系的主要内容,如果未能解决你的问题,请参考以下文章
updateOrCreate 在 laravel 中导致 ErrorException
updateOrCreate - Laravel 中的批量分配异常
PHP Laravel,方法 updateOrCreate 的替换
我们可以将模型传递给雄辩的Laravel的updateOrCreate方法吗?