Храните связанные элементы в одном запросе в Laravel - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть динамическая форма c, которая представляет данные в отношении: подпрограмма может иметь несколько разделов, и каждый раздел может иметь несколько упражнений.

Вот пример запроса, который отправляется:

{"_token":"Z1sF2K5LHU1bsQ4l3JRaOLCTQDmJ47qakigmrfI5","name":"New Routine 111","sections":{"section-1":{"section-name":"Section 1","exercises":{"1":{"name":"Exercise 11"},"2":{"name":"Exercise 12"}}},"section-2":{"section-name":"Section 2","exercises":{"3":{"name":"Exercise 21"},"4":{"name":"Exercise 22"},"5":{"name":"Exercise 23"}}},"section-3":{"section-name":"Section 3","exercises":{"6":{"name":"Exercise 31"},"7":{"name":"Exercise 32"}}}},"submit":"Submit"}

Итак, я попытался выполнить запрос через whol, но я немного застрял в том, как я могу сохранить их все с необходимыми отношениями:

    $routine = new Routine;
    $routine->title = $request->title;
    $routine->user_id = 1;
    $routine->create();
    foreach($data as $item){
        $section = new Section;
        $section->title = $item->title;
        $routine->sections()->create();
        foreach($item['exercises'] as $exercise){
            $section->exercises()->create(['title' => $exercise->title]);
        }
    }

1 Ответ

1 голос
/ 16 февраля 2020

Вы можете сделать это:


foreach($data as $item){
    $section = new Section;
    $section->title = $item->title;
    $section->create();
    foreach($item['exercises'] as $exercise){
        $section->exercises()->create([
              'title' => $exercise->title,
              'user_id' => User::where('token',$token)->first()->id
        ]);
    }
}

Не забудьте определить отношение упражнения () в вашей модели сечения.

Вы можете увидеть больше информации об этом здесь:

https://laravel.com/docs/5.8/eloquent-relationships#the -создать метод

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...