Laravel updateOrCreate 与 hasMany 关系
Laravel updateOrCreate with hasMany relationship
我的用户可以有多个参数。例如,它们被称为 user_param_1、user_param_2、...、user_param_n。这是动态的。它是一个单独的tableuser_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 是 eloquent 个模型的数组。条件不对。我无法直接访问 id。但是我该如何解决呢?我需要类似“['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]”之类的东西...但是如何以 eloquent 方式?
提前致谢!
此致
我认为您需要使用 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_param_1、user_param_2、...、user_param_n。这是动态的。它是一个单独的tableuser_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 是 eloquent 个模型的数组。条件不对。我无法直接访问 id。但是我该如何解决呢?我需要类似“['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]”之类的东西...但是如何以 eloquent 方式?
提前致谢!
此致
我认为您需要使用 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']
]);
}