Laravel pluck返回id值“0”

时间:2017-03-06 22:56:12

标签: php mysql laravel

我正在学习Laravel。现在我遇到了一个问题,我已经搜索了一个解决方案但尚未找到。 Pluck方法将数据库中的第一个id值作为 0 返回。不应该 1 吗?因此,我不能使用第一个id值(它给出了下面的错误)。

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败

我必须从第二个选择中选择才能发挥作用。我想知道我做错了什么。我正在使用Laravel 5.4。这是代码:

控制器:

function orders(Request $request) {
    $modelesc = $request->modelesc;
    $robots = DB::table('robots')->where('Model', $modelesc)->get();
    $colours = DB::table('colours')->get()->pluck('Colour');
    return view('orders', compact('robots', 'colours'));
}

function storeorders(Request $request) {
    order::create($request->all());
}

查看:

@foreach($robots as $robot)
  {!! Form::open(['method' => 'POST']) !!}
    Model: {!! Form::text('Model', $robot->Model) !!}<br><br>
    {!! Form::hidden('users_id', Auth::user()->id) !!}
    {!! Form::hidden('Fabrication_date', date('Y-m-d')) !!}
    Choose colour: {!! Form::select('Colour_id', $colours) !!}<br><br>
    {!! Form::hidden('Order_status_id', '1') !!}
    {!! Form::submit('Order') !!}
  {!! Form::close() !!}
@endforeach

1 个答案:

答案 0 :(得分:2)

如果您只指定要拔除的字段名称,则结果将被键控为普通的基于0的数组。为了使结果由数据库中的颜色id键入,您需要将id列指定为pluck()的第二个参数。

假设您的颜色ID位于Colour_id列中(基于您的表单),您的代码应如下所示:

$colours = DB::table('colours')->pluck('Colour', 'Colour_id');

注意,我还删除了对get()的中间调用。虽然它可以双向工作,但不首先执行get()将使您无法构建所有颜色的集合,然后从集合中进行采集。这节省了一些处理和内存。