#php #laravel #forms #relationship
#php #laravel #формы #отношения
Вопрос:
Я хочу создать / обновить все записи из формы, я ищу чистое решение, которое не использует никаких циклов, следующее можно легко исправить с помощью цикла. Я использую laravel 5.8
Класс модели: Школа -> hasMany (Класс модели: Program)
Это метод хранения (это требует исправления)
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>
- Как я могу правильно использовать createMany и передать массив
массивов? - Как я могу правильно обновить вышеупомянутые массивы?
Пожалуйста, попробуйте предоставить чистое решение, я только что создал приведенный выше пример, чтобы попытаться изучить правильное структурирование и управление данными в laravel.
Комментарии:
1. структура базы
program
данных таблицы?2. Я ищу решение для функций store () и update (), а не для базы данных 🙂
3. да, нам нужно знать столбцы таблицы programs
4. добавлена таблица programs для справки, спасибо
Ответ №1:
Я не знаю, достаточно ли понятен для вас этот ответ, но самое близкое, что я могу получить, это использовать 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()
);
}
Комментарии:
1. Просто быстрое исправление для вашей функции, вы должны добавить collect(….)-> toArray() для обработки, кроме этого, большое вам спасибо.
Ответ №2:
Я предполагаю, что каждое значение в ключе «день» совпадает с каждым значением в ключе «расписание», например, день «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 .