Лучший способ сохранить/обновить данные из json в модель Laravel с отношениями

#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 (), чтобы сохранить его в базе данных.
Есть ли более приятный способ?