简体   繁体   English

Laravel updateOrCreate 与 hasMany 关系

[英]Laravel updateOrCreate with hasMany relationship

I have users that can have multiple parameters.我有可以有多个参数的用户。 These are called for example user_param_1, user_param_2, ..., user_param_n.例如,它们被称为 user_param_1、user_param_2、...、user_param_n。 This is dynamic.这是动态的。 It is a separate table user_parameters, which stores id, user_id, name and value.它是一个单独的表 user_parameters,其中存储了 id、user_id、name 和 value。 The relationship is a belongsTo and hasMany between Users and UserParameters .关系是UsersUserParameters之间的belongsTo 和hasMany。 The problem is:问题是:

When editing, I want to keep it dynamically and if the user has an user_param_n+1, it should be created.编辑时,我想动态保留它,如果用户有 user_param_n+1,则应该创建它。 But I already have problems to write the condition for the existing parameters.但是我在为现有参数编写条件时已经遇到了问题。

I create myself an userParameters array, which contains from the $request variable only the necessary parameters.我为自己创建了一个userParameters数组,其中只包含 $request 变量中的必要参数。 The array looks like this:该数组如下所示:

[
  0 => [
    "name" => "par1"
    "value" => "var1"
  ]
  1 => [
    "name" => "par2"
    "value" => "var2"
  ]
  2 => [
    "name" => "par3"
    "value" => "var3"
  ]
]

Then I want to save it.然后我想保存它。 My controller knows the user, so I can access to $user->id.我的控制器知道用户,所以我可以访问 $user->id。

foreach ($userParameters as $userParameter) {
        $user->parameters()->updateOrCreate(['id' => $user->parameters->id, 'user_id' => $user->id], $userParameter);
}

The issue is, that $user->parameters is an array of eloquent models.问题是, $user->parameters 是一组雄辩的模型。 The condition is wrong.条件不对。 I can't access id directly.我无法直接访问 id。 But how I can solve it?但是我该如何解决呢? I need something like "['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]"... but how in an eloquent way?我需要像“['id' => [IF-DATABASE-ID-EXISTS-IN-ARRAY-$user-parameters]”之类的东西……但是如何以一种雄辩的方式呢?

Thanks in advance!提前致谢!

Best regards此致

I think you need to get the existing parameter using user_id and parameter_name cuz it's the uniqueness of that parameter row, if there is no parameter with this name it will create it with user_id & parameter_name and parameter_value passed to updateOrCreate function我认为您需要使用 user_id 和 parameter_name 获取现有参数,因为这是该参数行的唯一性,如果没有具有此名称的参数,它将使用传递给 updateOrCreate 函数的 user_id & parameter_name 和 parameter_value 创建它

foreach ($parameters_from_request as $parameter) {
        $user->parameters()
                ->updateOrCreate(
                 [
                 'name' => $parameter['name] ,
                 'user_id' => $user->id
                 ],[
                   'name' => $parameter['name'],
                   'value'=> $parameter['value']
                   ]);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM