2016-07-31 5 views
0

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

  1. счета (где данные счета-фактуры хранятся как member_id, скидки, DueDate, замечания и временные метки)
  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'); 

} 

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

Отношения между членами и счетов-фактур :: Член-имеет-много-фактуры, счета-фактуры принадлежит к одной балкой

Отношения между фактурой и invoiceitems :: счетов-HAS-много-пунктов, ан-элемент-принадлежит к одной накладной

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

<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> 

Ошибки IM получающей прямо сейчас Аргумент 1 передается осветить \ Database \ Grammar :: параметризацию() должен быть массив типов, в Тегер дал, называемый в C: \ XAMPP \ HTDOCS \ исследования \ поставщика \ Laravel \ Framework \ SRC \ Осветите \ Database \ Query \ грамматик \ Grammar.php на линии 719 и определяется

Update

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

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

} 

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

+0

В соответствии с вашими входными именами '$ request-> input ('description')' возвращает массив вместо одного значения. И после этого вы попытаетесь сохранить этот массив как значение столбца. Я не уверен, но я думаю, что это ваша проблема. – Phargelm

+0

@Phargelm Im пытается получить это отсортировано с помощью транспонирования(), я буду поддерживать это обновление после того, как у меня будет действующий код – ashish

+0

@Phargelm im после учебника [ссылка] (https://adamwathan.me/2016/04/06/ clean-up-form-input-with-transpose /) Теперь, когда я получаю массив правильно, но я хочу добавить дополнительную информацию, скажем, invoice_id в массиве. Не могли бы вы указать мне в правильном направлении. Я обновляю свои материалы здесь, [link] (https://laracasts.com/discuss/channels/eloquent/inserting-and-updating-data-from-dynamic-form-properly) – ashish

ответ

0

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

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


    Invoice::create($invoice) 
     ->invoiceitem()->createMany($items); 

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

+0

как вы решили обновление? – lewis4u

+0

Вот как я это сделал! 'foreach ($ items as $ item) { $ invoice-> invoiceitem() -> updateOrCreate (['id' => $ item ['id']], $ item); } ' – ashish

+0

А что, если вы удалите некоторые старые и добавьте новые – lewis4u

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 s в отдельный метод, коллекция макросов может быть хорошей идеей, как учебник предполагает (хотя я реализую это по-другому, мое предложение не требует номера индексов в оригинальном 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

Это действительно упростило бы все, обновив форма была бы намного проще, но одна вещь, поскольку мы используем поля формы формы имени как элементы [description] [], без индексации, как мы проверяем форму? Можете ли вы дать мне какую-то идею? – ashish

+0

NEVER MIND !! РЕШАЕМ ЭТО: P я собираюсь опубликовать все это, когда я сделал! – ashish

Смежные вопросы