使用Laravel 5

时间:2017-08-07 11:25:30

标签: php mysql html5 laravel laravel-5.4

我正在使用Product&价格模型。我的产品表有一个id和name列,而我的价格表有一个id,product_id,cost和date列。价格表上的product_id引用products表上的id。我的表单显示每个产品的字段,以便用户随时输入价格。我的挑战是如何处理请求数据,以便价格对应于product_id。下面是我到目前为止编写的代码

表格

<form class="form-horizontal" method="POST" action="{{ url('/home/prices') }}">
{{ csrf_field() }}
@if(isset($products) && !empty($products))
    @foreach($products as $product)
        <div class="form-group">
            <div>
                <input type="hidden" class="form-control" name="product_id[]" value="{{ $product->id }}">
            </div>
        </div>

        <div class="form-group">
            <label class="col-sm-2" for="{{ $product->name }}">{{ ucwords($product->name) }}</label>

            <div class="col-sm-3">
                <input type="text" class="form-control" name="cost[]">
            </div>
        </div>
    @endforeach
@else
    Sorry, no product available currently.
@endif

<button type="submit" class="btn btn-default">Add</button>
</form>

PriceController

public function store(Request $request)
{
//dd($request);
foreach ($request->input('cost') as $cost) {
    Price::create([
        'product_id' => $request->product_id,
        'date' => Carbon::now(),
        'cost' => $cost,
        'trend' => 0
    ]);
}

return redirect('/home');
}

这是我转储请求数据时得到的结果 enter image description here

当然我的代码会抛出此错误 at Builder->insertGetId(array('product_id' => array('1', '2', '3'), 'date' => object(Carbon), 'cost' => '14.05', 'trend' => 0, 'updated_at' => '2017-08-07 11:21:47', 'created_at' => '2017-08-07 11:21:47'), 'id')

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

foreach ($request->input('cost') as $key=>$cost) {

    Price::create([
        'product_id' => $request->product_id[$key],
        'date' => Carbon::now(),
        'cost' => $cost,
        'trend' => 0
    ]);
}

正如您所看到的那样,整个数组在产品的ID中传递,因此您需要提及您需要插入的特定ID

答案 1 :(得分:1)

您可以在输入数组中使用索引或键/值对的概念,如下所示:

试试这个,

foreach ($request->input('cost') as $key=>$cost) {
    Price::create([
        'product_id' => $request->product_id[$key],
        'date' => Carbon::now(),
        'cost' => $cost,
        'trend' => 0
    ]);
}

这将保存您的数据,如

1 -> 14.05
2 -> 13.75
3 -> 12.99

希望你明白。