如何使用updateOrCreate与hasMany关系?



如何使用updateOrCreatehasMany的关系。例如,我有第一个模型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]
);
}

最新更新