Read this post by Adam Wathan and all will become clear... https://adamwathan.me/2016/04/06/cleaning-up-form-input-with-transpose/
Inserting and updating data from dynamic form properly
So far, I have found answers in here and never needed to ask anything. But this issue is really bugging me. Here is the situation. I have a dynamic invoice form. Posts from the form will be saved to two different tables
- invoices(where details for invoice is stored like member_id, discount, duedate, remarks and the timestamps) 2.invoiceitems(invoice_id, itemdescription, quantity, rate, timestamps)
To achieve this, here is my method to store invoice
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');
}
Additional Information:
Relationship between members and invoices:: member-has-many-invoices, invoice-belongs-to-single-member
Relationship between invoice and invoiceitems:: invoice-has-many-items, an-item-belongs-to-one-invoice
partial of the dynamic form:
<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>
Errors im receiving right now Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, integer given, called in C:\xampp\htdocs\study\vendor\laravel\framework\src\Illuminate\Database\Query\Grammars\Grammar.php on line 719 and defined
Update: when i try to return the inputs for invoiceitems, i get an array like below {
"description": [
{
"description": "desc1"
},
{
"description": "desc2"
}
],
"rate": [
{
"rate": "11"
},
{
"rate": "22"
}
],
"quantity": [
{
"quantity": "1"
},
{
"quantity": "2"
}
],
"invoice_id": 41
}
Thanks in advance, This is my first application in Laravel. Im still learning, please dont mind if what im asking is stupid. This website has helped me alot
Ashish Aryal
You don't need to alter the collection, just now use it to create your invoice lines.
foreach ($invoiceItems as $invoiceItem)
{
InvoiceItem::create([
'description' => $invoiceItem->description,
'rate' => $invoiceItem->rate,
'quantity' => $invoiceItem->quantity,
'invoice_id' => $resultforinvoice->id,
]);
}
Please or to participate in this conversation.