试图存储多个数据(行),但它只在laravel中创建1行

时间:2019-03-12 09:45:04

标签: php arrays laravel

我正在尝试存储数组数据(保存多行),但是单行存储在数据库中。

这是我的表格,

d = bag_of_words.set_index('word')['probability'].to_dict()
DF['text'] = [' '.join(str(d.get(y, y)) for y in x.split()) for x in DF['text']]

print (DF)
                            text
0  -2.862037 -3.500018 -3.549299
1  -3.696334 -3.7625620000000004

这是我的商店功能

{!! 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() !!}

dd($ acceptItem);结果

enter image description here

dd($ input)个结果

enter image description here

您认为这可能是什么原因?预先谢谢你!

1 个答案:

答案 0 :(得分:1)

您需要将控制器方法更改为此

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');
}

由于您的代码在创建第一个acceptItem之后清晰地显示在下面,因此您将被重定向到route('orders.index')而不创建其他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');
}

因此,您需要将return语句移出for循环。