2016-07-31 80 views
0

到目前爲止,我在這裏找到了答案,並且從不需要詢問任何內容。但這個問題真的讓我感到困擾。這是情況。我有一個動態的發票表單。從表單帖子將被保存到兩個不同的表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'); 

} 

附加信息的方法:構件和發票之間

關係::構件具有一對多-發票,發票屬於對單成員

發票和invoiceitems關係::發票具有一對多項, 一個項目-屬於對一發票

局部動態形式:

<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)必須是類型數組,in teger給出,稱爲C:\ XAMPP \ htdocs中\學習\供應商\ laravel \框架的\ src \照亮\數據庫\查詢\語法\ Grammar.php上線719和定義

更新

時我試圖返回的輸入,invoiceitems檢查怎麼回事,我得到像下面

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

} 

傢伙一個數組,請告訴讓我知道我在想念。我曾嘗試在laracast上提出這個問題,目前幾個小時沒有任何問題,希望有人會指出我正確的方向。 Here is the laracast link.

+0

根據你的輸入名稱'$ request-> input('description')'返回一個數組而不是單個值。之後,您嘗試將該數組保存爲列值。我不確定,但我認爲這是你的問題。 – Phargelm

+0

@Phargelm我試圖讓這個排序使用轉置(),我會保持這個更新,一旦我有一個功能代碼 – ashish

+0

@Phargelm即時通訊教程[鏈接](https://adamwathan.me/2016/04/06/清理形式輸入與轉置/)現在,即時獲取數組正確,但我想添加額外的信息,說數組中的invoice_id。你會把我指向正確的方向嗎?我更新我的東西在這裏,[鏈接](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

這就是我做到的! ($'item'爲$ 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

這將真正簡化整個事情,更新形式會更簡單,但有一點,因爲我們使用名稱形式的表單字段作爲項[描述] [],沒有索引,我們如何驗證表單?你能給我一些想法嗎? – ashish

+0

永遠不要心動!已解決:我即將完成後即時發佈整個事情! – ashish