Задать вопрос
@mixejuxix

Как сохранить модель со вложенными отношениями?

Привет!
У меня есть модель со вложенными отношениями

//Псевдокод
Sites
    ->hasOne(Header::class) ['title', 'slogan']
        ->hasOne(Logo::Class)
    ->hasOne(Portfolio::Class)
        ->hasMany(PortfolioItem::Class) ['title']
            ->hasOne(Image::Class);


С фронтенда я передаю данные в json формате

{  
   "id":1,
   "header":{
      "id":3 //Есть id - обновим
      "title":"Рога и копыта",
      "slogan":"Продаем и покупаем",
      "logo":{  
         "id":135,
      }
   },
   "portfolio":{  
      "PortfolioItem":[  
         {  //У этого объекта нет id - нужно вставить новый
            "image":{  
               "id":555,
            }
            "title":"Тест 1",
         },
         {  
            "id":204, //Такой объект уже существует - нужно его обновить
            "title":"Тест 2",
         }
      ]
   },
}


Как правильно редактировать/создавать такое?
Возможно есть какие то инструменты для автоматической вставки/обновления модели со всеми отношениями?

То есть хочется не вручную сохранять все эти отношения, а найти библиотеку которая сама, на основе json+отношения сохранит все как нужно.
  • Вопрос задан
  • 147 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@NubasLol
public function save(Request $request) {
        $model = Model::query()->updateOrCreate($request->all());
        
        $this->createRelation($request->all(), $model);
    }

    public function createRelation($data, $model) {
        foreach ($data as $key => $value) {
            if (method_exists($model, $key)) {
                         $relation = $model->$key()->updateOrCreate($value);


                $this->createRelation($value, $relation);
            }
        }
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы