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

Ken*_*ink 1 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]
    );
}
Run Code Online (Sandbox Code Playgroud)

但它似乎不能正常工作:

https://i.stack.imgur.com/8ndQt.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]);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢,

肯尼

小智 5

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

例子:

EmployeeCompetence::updateOrCreate(
    [
      'employee_id'   => $id, 
      'competence_id' => $getCompetenceKey
    ],
    [
      'value'         => $getCompetenceValue,
      'employee_id'   => $id, 
      'competence_id' => $getCompetenceKey
    ]
);
Run Code Online (Sandbox Code Playgroud)