如何使用updateOrCreate
与hasMany
的关系。例如,我有第一个模型Code
:
class Code {
public function item()
{
return $this->hasOne(UserItem::class, 'code_id')
}
}
对于嵌套关系UserItem
:
class UserItem {
public function serials()
{
return $this->hasMany(ItemSerial::class, 'user_item_id', 'id');
}
}
我需要updateOrCreate
的值与serials
的关系。我试过了:
foreach ($data['item_serials'] as $serial) {
$code->item->serials()->updateOrCreate([
'serial' => $serial
]);
}
但这并不工作,我需要,因为它改变了两个序列值相同的值。下面是serials
表的样子:
id user_item_id serial
1 1 lorem
2 1 ipsum
然后我收到request
:
'item_serials' =>
array (
0 => 'test1',
1 => 'test2',
2 => 'test3'
),
和这个请求,我想更新serials
表如下:
id user_item_id serial
1 1 test1
2 1 test2
3 1 test3
我希望我的解释可以理解。我该如何处理这个问题?
Update或create接受两个参数1-updated数据2-condition像
$flight = Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99, 'discounted' => 1]
);
见文档https://laravel.com/docs/8.x/eloquent
添加array
作为updateOrCreate()
内部的第一个参数,它将用于检索/查找现有的serial
,如果它更新,但如果没有,然后创建它。
foreach ($data['item_serials'] as $serial) {
$code->item->serials()->updateOrCreate(
['serial' => $serial],
['serial' => $serial]
);
}