Laravel 5.4: вставлять каждый элемент как строку из одной формы - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть форма, которая вставляет несколько продуктов, здесь это моя форма

{!! 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 голосов
/ 17 февраля 2019

Большое спасибо @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'];
    ......
}
...