I am trying to store array data(saving multiple row) but on single row is being store in my database.
here's my form,
{!! Form::open(['route' => 'warehouse1.store']) !!}
@foreach($order->orderItems as $orderItem)
<input type="number" name="stock_in_qty[]" id="stock_in_qty_{{$orderItem->id}}" class="form-control stock_in_qty" min="1" value="{{$orderItem->quantity}}" data-max="{{$orderItem->quantity}}" onkeyup="check(this);"/>
<script type="text/javascript">
var $orderItem_id = {{$orderItem->id}};
$('#stock_in_qty_'+$orderItem_id).on('mouseup keyup', function () {
$(this).val(Math.min({{$orderItem->quantity}}, Math.max(1, $(this).val())));
});
</script>
{{ Form::date('delivery_date[]',today(), ['class' => 'form-control date', 'style' => 'width:200px;','required']) }}
{!! Form::text('delivery_note[]', null, ['class'=>'form-control']) !!}
{!! Form::hidden('order_id[]', $order->id) !!}
{!! Form::hidden('order_item_id[]', $orderItem->id ) !!}
{!! Form::hidden('company_id[]', $order->company->id) !!}
{!! Form::hidden('stock_out_qty[]',null) !!}
{!! Form::hidden('transfer_to[]', null) !!}
{!! Form::hidden('user_id[]',auth()->user()->id ) !!}
@endforeach
{!! Form::submit('Add to stocks', [ 'class'=>'btn btn-info']) !!}
{!! Form::close() !!}
Here's my store function
public function store(Request $request)
{
$input = $request->all();
for($i=0; $i<= count($input['stock_in_qty']); $i++) {
if(empty($input['stock_in_qty'][$i]) || !is_numeric($input['stock_in_qty'][$i])) continue;
$acceptItem = [
'order_id' => $input['order_id'][$i],
'order_item_id' => $input['order_item_id'][$i],
'delivery_date' => $input['delivery_date'][$i],
'company_id' => $input['company_id'][$i],
'stock_in_qty' => intval($input['stock_in_qty'][$i]),
'stock_out_qty' => $input['stock_out_qty'][$i],
'transfer_to' => $input['transfer_to'][$i],
'delivery_note' => $input['delivery_note'][$i],
'user_id' => $input['user_id'][$i]
];
Warehouse1stocks::create($acceptItem);
return redirect()->route('orders.index');
}
}
dd($acceptItem); result
dd($input) result
what do you think is the possible cause of this? Thank you in advance!
You need to change your controller method to this
public function store(Request $request)
{
$input = $request->all();
$items = [];
for($i=0; $i < count($input['stock_in_qty']); $i++) {
if(empty($input['stock_in_qty'][$i]) || !is_numeric($input['stock_in_qty'][$i])) continue;
$acceptItem = [
'order_id' => $input['order_id'][$i],
'order_item_id' => $input['order_item_id'][$i],
'delivery_date' => $input['delivery_date'][$i],
'company_id' => $input['company_id'][$i],
'stock_in_qty' => intval($input['stock_in_qty'][$i]),
'stock_out_qty' => $input['stock_out_qty'][$i],
'transfer_to' => $input['transfer_to'][$i],
'delivery_note' => $input['delivery_note'][$i],
'user_id' => $input['user_id'][$i]
];
array_push($items, Warehouse1stocks::create($acceptItem));
}
dd($items);
return redirect()->route('orders.index');
}
Because as your code clearly shows below after the creation first acceptItem
you will be redirected to the route('orders.index')
and not create the other acceptItems
for($i=0; $i<= count($input['stock_in_qty']); $i++) {
if(empty($input['stock_in_qty'][$i]) || !is_numeric($input['stock_in_qty'][$i])) continue;
$acceptItem = [
'order_id' => $input['order_id'][$i],
'order_item_id' => $input['order_item_id'][$i],
'delivery_date' => $input['delivery_date'][$i],
'company_id' => $input['company_id'][$i],
'stock_in_qty' => intval($input['stock_in_qty'][$i]),
'stock_out_qty' => $input['stock_out_qty'][$i],
'transfer_to' => $input['transfer_to'][$i],
'delivery_note' => $input['delivery_note'][$i],
'user_id' => $input['user_id'][$i]
];
Warehouse1stocks::create($acceptItem);
return redirect()->route('orders.index');
}
So you need to move the return
statement out of the for loop.