#php #mysql #laravel #relationship
Вопрос:
У меня есть две модели:
Models/Arrival.php:
protected $guarded = [];
public function nomenclatures()
{
return $this->hasMany(ArrivalNomenclature::class, 'arrival_id', 'id');
}
public function warehouses()
{
return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id');
}
Models/ArrivalNomenclatures.php:
protected $guarded = ['id'];
public function nomenclatures()
{
return $this->belongsTo(Nomenclature::class, 'nomenclature_id');
}
public function arrivals()
{
return $this->belongsTo(Arrival::class, 'arrival_id');
}
Мне нужно сохранить от json:
{
"type": "provider",
"invoice": "123yk43",
"filial_id": 10,
"warehouse_id": 6,
"provider_id": 9,
"responsible": "ttt",
"user_id": "4",
"carried_out": 0,
"nomenclatures": [
{
"confirmed": 0,
"nomenclature_id": 1,
"price": 1337,
"quantity": 10,
},
{
"confirmed": 0,
"nomenclature_id": 1,
"price": 1337,
"quantity": 10,
}
....
]}
Сотворение мира не вызывает вопросов.
Как правильно обновлять модели?
$arrival = Arrival::findOrFail($id);
$arrival->update($dataArrival);
ArrivalNomenclature::where('arrival_id', $arrival->id)->delete();
foreach ($request->nomenclatures as $nomenclature) {
$data[] = new ArrivalNomenclature($nomenclature);
}
$arrival->nomenclatures()->saveMany($data);
На данный момент я нахожу его по идентификатору и делаю обновление. Затем я удаляю все дочерние записи по идентификатору. Я создаю массив моделей в цикле и использую метод saveMany (), чтобы сохранить его в базе данных.
Есть ли более приятный способ?