updateOrCreate数组中的多个属性(Eloquent)

时间:2017-10-26 07:21:35

标签: php mysql laravel eloquent

如果还没有符合以下条件,我尝试创建新行:

['employee_id' => $id, 'competence_id' => $getCompetenceKey]

或者如果它已经存在,我会更新它并设置['value' => $getCompetenceValue]

所以我这样做了:

foreach($request->input('competence') as $getCompetenceKey => $getCompetenceValue) {
    EmployeeCompetence::updateOrCreate(
     ['employee_id' => $id,'competence_id' => $getCompetenceKey],
     ['value' => $getCompetenceValue]
    );
}

但它似乎没有正常工作:

https://i.imgur.com/CNPZ2AB.png

我可以这样做:

foreach ($request->input('competence') as $getCompetenceKey => $getCompetenceValue) {
    $e = EmployeeCompetence::where('employee_id', $id)->where('competence_id', $getCompetenceKey);
    if ($e->count() > 0) {
        $e->update(['value' => $getCompetenceValue]);
    } else {
            EmployeeCompetence::create(['employee_id' => $id,
                                      'competence_id' => $getCompetenceKey, 
                                              'value' => $getCompetenceValue]);
    }
}

但我真的想知道为什么updateOrCreate()函数对我没用。

谢谢,

肯尼

3 个答案:

答案 0 :(得分:2)

第一列用于更新,但也应该在create函数中传递。

示例:

EmployeeCompetence::updateOrCreate(
    [
      'employee_id'   => $id, 
      'competence_id' => $getCompetenceKey
    ],
    [
      'value'         => $getCompetenceValue,
      'employee_id'   => $id, 
      'competence_id' => $getCompetenceKey
    ]
);

答案 1 :(得分:0)

我不确定这是否有效,但根据我的理解。

updateOrCreate $ primaryKey 字段作为查询。

我不确定,这可能会解决您的问题。 在模型文件中添加以下行,然后尝试

protected $primaryKey = ['employee_id', 'competence_id'];

答案 2 :(得分:0)

我也遇到了updateOrCreate方法的问题。

$user = user::updateOrCreate(
    ['email' =>  'xxx'],
    [
        'location' => 'yyy' ,
    ],
);

首先,我不需要在参数的第二个元素中传递“电子邮件”。 我们需要在模型类中使用要更新的字段创建一个可填充的变量。

protected $fillable = ['email' ,'location' ,'column1' ,'colun2'];

这对我有用,所以想在这里发布。谢谢。