Laravel создает или обновляет многие в модели связанных отношений из формы - PullRequest
0 голосов
/ 13 апреля 2019

Я хочу создать / обновить все записи из формы, я ищу чистое решение, не использующее циклы, следующее можно легко исправить с помощью цикла.Я использую laravel 5.8

Модель Класс: Школа -> HasMany (Модель Класс: Программа )

Это магазинметод (необходимо исправить)

public function store(Request $request, School $school)
{
    $school->programs()->createMany(array($request->day, $request->schedule));
}

Это метод обновления (необходимо исправить)

public function update(Request $request, School $school)
{
    $school->programs()->update(array($request->day, $request->schedule));
}

Форма имеет простой массив ввода

<td width><input type="number" name="day[]" placeholder="Course Day (1-5)" class="form-control" /></td>
<td width><input type="text" name="schedule[]" placeholder="Actual schedule" class="form-control" /></td>

enter image description here enter image description here

  1. Как правильно использовать createMany и передать массив массивов?
  2. Как правильно обновить вышеуказанные массивы?

Пожалуйста, попробуйте предоставить чистое решение, я только что создал приведенный выше пример, чтобы попытаться изучить правильное структурирование и управление данными в laravel.

Ответы [ 2 ]

1 голос
/ 13 апреля 2019

Я не знаю, достаточно ли чист этот ответ для вас, но самое близкое, что я могу получить, это использовать map функцию сбора.

public function store(Request $request, School $school)
{

    $school->programs()->createMany(
        collect($request->day)->map(function($day, $key) {
            return [
                'day' => $day,
                'schedule' => request('schedule')[$key],
            ];
        })->toArray()
    );
}
0 голосов
/ 13 апреля 2019

Я предполагаю, что каждое значение в ключе "день" соответствует каждому значению в ключе "расписание", например, день "1", соответствует расписанию "test1". Мы могли бы сделать что-то вроде этого.

public function store(School $school)
{
    collect(request('day'))->map(function ($day, $index) {
        return [
            'day' => day,
            'schedule' => request('schedule')[$index]
        ];
    )->each(function ($program) use ($school) {
        $school->programs()->create($program);
    });
}

Чтобы сделать код чище, я использую вспомогательную функцию request () вместо объекта $ request.

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