Laravel 5.4:将每个项目作为一种表格的行插入

时间:2019-02-14 13:28:40

标签: php eloquent laravel-5.4

我有一个表单,可以在其中插入多个产品,这是我的表单

{!! Form::open(['route'=>'export-list.store']) !!}
        @foreach($orderis as $orderi)
           {!! Form::hidden('product_id[]', $orderi->productId->id) !!}
           {!! Form::hidden('quantity[]', $orderi->quantity) !!}
               <tr>
                  <td>{!! $sn++ !!}</td>
                  <td width="5%">
                  {!! Html::image('images/products/'. $orderi->productId->image, 'thumbs-'.$orderi->productId->name, ['height' => 70]) !!}
                  </td>
                  <td>{!! $orderi->product_name !!}</td>
                  <td>{!! $orderi->quantity !!}</td>
                  <td>
                     <div class="col-md-5">
                        <div class="form-group-inner">
                       {!! Form::text('inventory[]', null, ['class'=>'form-control']) !!}
                        </div>
                     </div>
                 </td>
                 <td>{!! $orderi->productId->price !!}</td>
                 <td>{!! $orderi->productId->price * $orderi->quantity !!}</td>
               </tr>
           @endforeach
               <tr>
                 <td colspan="9">{!! Form::submit('Submit', ['class'=>'btn btn-primary']) !!}</td>
               </tr>
{!! Form::close() !!}

最终结果是一个数组。

array:4 [▼
  "_token" => "cpua1RzKKP4vvklB99HafAdMQ65TSxOWQVQ5r3ye"
  "product_id" => array:3 [▼
    0 => "856"
    1 => "857"
    2 => "858"
  ]
  "quantity" => array:3 [▼
    0 => "9"
    1 => "8"
    2 => "2"
  ]
  "inventory" => array:3 [▼
    0 => "8"
    1 => "2"
    2 => "6"
  ]
]

这是我的控制器

public function store( Request $request ) {
        $input = $request->all();

        //Check for the needed quantity
        $quantity        = $input['quantity'];
        $inventory       = $input['inventory'];
        $needed_quantity = $quantity - $inventory;
        //Get the product information
        $productInfo = ( new Product() )->find( $input['product_id'] );
        $totalPrice  = $productInfo->price * $needed_quantity;


        ( new PurchaseOrder() )->create( [
            'product_id'      => $input['product_id'],
            'product_name'    => $productInfo->translate( 'ar' )->name,
            'product_image'   => $productInfo->image,
            'needed_quantity' => $needed_quantity,
            'unit_price'      => $productInfo->price,
            'total_price'     => $totalPrice,
            'barcode'         => $productInfo->barcode,
        ] );

        return redirect()->route( 'order-detail.index' )->with( 'status', 'Created successfully' );
    }

如何将每个项目作为表格的行插入

1 个答案:

答案 0 :(得分:1)

非常感谢@SNAPEY,他帮助我解决了问题

当我对字段进行不同的命名时,它会更容易...

@foreach($orderis as $orderi)
        {!! Form::hidden('products[' . $loop->index . '][product_id]', $orderi->productId->id) !!}
        {!! Form::hidden('products[' . $loop->index . '][quantity]', $orderi->quantity) !!}
        {!! Form::text('products[' . $loop->index . '][inventory]', null, ['class'=>'form-control']) !!}           
@endforeach

所以最终结果是这样的

array:2 [▼
  "_token" => "muw3phvtnjnJnjBYNqbp0A5f6Pk5St1BkydKPGG7"
  "products" => array:3 [▼
    0 => array:3 [▼
      "product_id" => "856"
      "quantity" => "9"
      "inventory" => "2"
    ]
    1 => array:3 [▼
      "product_id" => "857"
      "quantity" => "8"
      "inventory" => "3"
    ]
    2 => array:3 [▼
      "product_id" => "858"
      "quantity" => "2"
      "inventory" => "4"
    ]
  ]
]

使用foreach这样在控制器中管理数据非常容易

$eachProducts = $input['products'];

foreach ( $eachProducts as $each_product ) {
    $quantity        = $each_product['quantity'];
    $inventory       = $each_product['inventory'];
    ......
}