如果还没有符合以下条件,我尝试创建新行:
['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()函数对我没用。
谢谢,
肯尼
答案 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'];
这对我有用,所以想在这里发布。谢谢。