Laravel使用两个输入数据

时间:2018-02-07 15:18:34

标签: arrays laravel-5.5

正在构建一个电子商务应用,我希望使用html / blade模板中的几个输入字段更新数据库中的两条记录。 我有一个产品,其尺寸作为产品的选项。因此,衬衫可以选择1作为选项,选项2选择中选,选项3选择大。然后我创建了一个productProductOptions表,其中包含product_id列和product_option_id列。

如果管理员想要更新产品,我会遍历productProductOptions表并将产品选项显示在产品/编辑页面上。因此,一旦更改了必要的选项,我就可以再次将它们重新抓回productProductOptions

数据库:

   product_id | product_option_id
        1     |         2
        1     |         3

这是我的HTML:

  @foreach($productOptions as $thisProduct)
    <div class="row">
        <div class="col-md-3">
            <div class="form-group {{ $errors->has('option_id') ? 'has-error': '' }}">
                <label for="size">Sizes:</label>                
                <select class="form-control" id="size" class="form-control" name="option_id[]">
                    @if(isset($thisProduct))    

                        @foreach($options as $option)

                            <option value="{{ $option->id }}"
                            @if($thisProduct->productOption->id == $option->id) selected="selected" @endif 
                            >{{ $option->name }}</option>

                        @endforeach

                    @endif
                <select/>
            </div>
        </div>
 @endforeach 

这是我的控制者:

 $productProductOptions = ProductProductOption::where('product_id', $product->id)->get();

for ($i=0; $i < count($request->option_id); $i++) { 
    foreach ($productProductOptions as $productProductOption) {
         $productProductOption->update(['product_option_id' => $request->option_id[$i]]);
    }
 }

但它从表单中选取最后一个选项并用它更新两个记录。 例如:管理员选择small =选项1和medium =选项2,两个记录都会更新为2

1 个答案:

答案 0 :(得分:0)

  $productProductOption = []; $i = 0;

    foreach ($request->option_id as $optionId) {

        $productProductOption[$optionId] = [ 
            'regular_price'     => $request->regular_price[$i], 
            'sales_price'       => $request->sales_price[$i],  
            'quantity_available'=> $request->quantity_available[$i] 

        ];

        $i+=1;

    }

    $product->options()->sync($productProductOption);