Поэтому я создал форму, которая будет подчиняться двум отдельным таблицам. Это для создания счета-фактуры. Каждый счет-фактура имеет переменное количество строк, поэтому я создал две таблицы: одну для счета и одну для каждой строки. Строки привязаны к таблице счетов через внешний ключ.
С чистым PHP это просто вопрос именования входов «name []», а затем цикл через них. Но в Ларавеле это не работает. В принципе, у меня есть:
$invoice = new Invoice; $invoice->fill($data); $invoice->save(); for ($i = 0; $i < count($request->item); $i++){ $row = new InvoiceRow; $row->fill(array('item' => $request->item[$i], 'description' => $request->description[$i], 'cost' => $request->cost[$i], 'quantity' => $request->quantity[$i], 'total' => $request->itemTotal[$i])); $invoice->InvoiceRows()->save($row); }
Он сохранит первую строку, но не остальные строки.
Изменить: Вот некоторые из разметки, без классов для начальной загрузки и проверки. Строка клонируется с помощью jQuery для каждой необходимой строки для документа.
<tr class="item-row"> <td> class="form-control form-inline item-name" name="item[]"> </td> <td> <input type="text" name="description[]"> </td> <td> <input type="number" name="cost[]"> </td> <td> <input name="quantity[]"> </td> <td> <input type="number" name="itemTotal[]"> </td> </tr>
Итерации над этим объектом, например
$name = $request->name; //here name is the name of your form's name[] field foreach($name as $names) { //do something }