Laravel 5.2 Вставка и обновление данных из динамической формы

Пока что я нашел ответы здесь, и мне никогда не нужно было ничего спрашивать. Но эта проблема действительно беспокоит меня. Здесь ситуация. У меня есть динамическая форма счета. Сообщения из формы будут сохранены в двух разных таблицах

  1. счета-фактуры (где хранятся данные для счета-фактуры, такие как member_id, скидка, уведомление, примечания и временные метки)
  2. invoiceitems (invoice_id, itemdescription, количество, скорость, временные метки)

Чтобы добиться этого, вот мой метод для хранения счета

public function store(InvoiceRequest $request)
{

//get necessary details for invoice table
$datainvoice = array(
'member_id' => $request->input('member_id'),
'duedate' => $request->input('duedate'),
'discount' => $request->input('discount'),
'remarks' => $request->input('remarks'),
//'gtotal' => $request->input ('gtotal'),
);

//save result of invoice
$resultforinvoice = Invoice::create($datainvoice);// ready all data of invoice items
$datainvoiceitem = array(
'description' => $request->input('description'),
'rate' => $request->input('rate'),
'quantity' => $request->input('quantity'),
'invoice_id' => $resultforinvoice->id,
);// insert invoice along with invoice_id
Invoiceitem::create($datainvoiceitem);
return redirect('members');

}

Дополнительная информация:

Отношения между участниками и счетами :: member-has-many-invoices, invoice-принадлежит-to-single-member

Связь между инвойсом и invoiceitems :: invoice-has-many-items,
ан-элемент-принадлежит к одному-фактуре

частичная часть динамической формы:

<td>  1   </td>
<td><textarea type="text" name='description[0][description]'   class="form-control"/></textarea> </td>
<td><input type="text" name='quantity[0][quantity]'  class="form-control"/></td>
<td> <input type="text" name='rate[0][rate]'  class="form-control"/>   </td>

Ошибки, которые я получаю прямо сейчас. Аргумент 1, передаваемый в Illuminate \ Database \ Grammar :: parameterize (), должен иметь тип массива, заданное целое число, вызываемое в C: \ xampp \ htdocs \ study \ vendor \ laravel \ framework \ src \ Illuminate \ База данных \ Query \ Grammars \ Grammar.php в строке 719 и определена

Обновить

Когда я пытаюсь вернуть входные данные для invoiceitems, чтобы проверить, что происходит, я получаю массив, как показано ниже

{
"description": [
{
"description": "desc1"},
{
"description": "desc2"}
],
"rate": [
{
"rate": "11"},
{
"rate": "22"}
],
"quantity": [
{
"quantity": "1"},
{
"quantity": "2"}
],
"invoice_id": 41

}

Ребята, скажите, пожалуйста, дайте мне знать, где мне не хватает. Я пытался спросить об этом и в laracast, сейчас пару часов ничего не было, надеюсь, кто-то укажет мне правильное направление. Вот ссылка на Ларакаст.

0

Решение

Могу ли я предложить

public function store(InvoiceRequest $request)
{
$invoice_fields = ['member_id', 'duedate', 'discount', 'remarks', 'gtotal'];

$items = [];

foreach ($request->items as $field => $values) {
foreach ($values as $index => $value) {
$items[$index][$field] = $value;
}
}

Invoice::create($request->only($invoice_fields))
->items()->createMany($items);

return redirect('members');
}

(Если вы правильно настроили отношение, вам не нужно вручную присваивать invoice_id каждому элементу, просто укажите счет-фактуру create предмет).


Вы можете абстрагировать foreachВ отдельном методе макрос Collection может быть хорошей идеей, как подсказывает учебник (хотя я реализую его по-другому; мое предложение не нуждается в индексах в оригинальном HTML).
HTML-код для вашей формы должен выглядеть следующим образом

<input type="text" name="items[description][]">
<input type="text" name="items[quantity][]">
<input type="text" name="items[rate][]">

<input type="text" name="items[description][]">   <!-- as many of -->
<input type="text" name="items[quantity][]">      <!-- these      -->
<input type="text" name="items[rate][]">          <!-- as needed  -->
0

Другие решения

В итоге я обновил большую часть кода и теперь это выглядит так

 $items = [];
foreach ($request->items as $field => $values) {
foreach ($values as $index => $value) {
$items[$index][$field] = $value;
}
}Invoice::create($invoice)
->invoiceitem()->createMany($items);

и это просто сработало. Дайте мне знать, что кому-то еще нужна помощь в этом. Я был бы рад объяснить

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector