2017-04-18 29 views
0

数据库表有两个字段first_name和last_name。 如果我要填写一个下拉框,我可以使用此代码:刀片模板中的SelectRaw创建下拉列表

{!! Form::select('driver_id', App\Driver::pluck('first_name','id'), null, ['class' => 'form-control']) !!} 

但是如果我想CONCAT个域中,我应该在我的模型使用SelectRow:

{!! Form::select('driver_id', App\Driver::select(DB::raw("CONCAT(first_name,' ', last_name) AS full_name, id"))->pluck('full_name','id'), null, ['class' => 'form-control']) !!} 

但这种解决方案并不作品,这就是我得到:

<select class="form-control" name="driver_id"> 
<option value="">Autista...</option> 
<option value="11"> </option> 
<option value="12"> </option> 
<option value="13"> </option> 
..... 
</select> 

也就是说....选择没有得到“FULL_NAME”申请,但得到的“ID”字段。 如何解决?

+0

您可以在您的控制器中创建一个连接阵列,然后将它传递给您的视图刀片中的选择标记 –

+0

当然。但如何让这个优雅的解决方案工作? – Polarix

+0

请将您的解决方案作为您自己问题的答案,而不是问题本身。谢谢。 –

回答

0

我想你可以试试这个:

{{ Form::select('driver_id', App\Driver::select(DB::raw("CONCAT(first_name,' ', last_name) AS full_name, id"))->lists('full_name','id'), null, ['class' => 'form-control']) }} 

希望这对你的工作!

+0

列表功能从laravel 5.3版本不可用。 –

+0

谢谢。但是收集方法 - > lists()已被弃用。 >集合,查询构建器和Eloquent查询生成器对象上的列表方法已重命名为采摘。方法签名保持不变。 – Polarix

0

试一试在你的刀片文件:

App\Driver::select(
     DB::raw("CONCAT(first_name,' ',last_name) AS full_name"),'id') 
     ->pluck('full_name', 'id'); 
+0

我编辑了我的上面的代码.... –

+0

@Polarix:上面的代码是否适用于您的情况? –

+0

不,问题是**别名字段名**。 Pluck函数找不到字段“full_name”。 另请参阅[laravel camel_case()](https://laravel.com/docs/5.4/helpers#method-camel-case)以获取更多信息。 – Polarix

0

SOLUTION

的问题是强调字符别名字段名 “FULL_NAME”。

此代码工作正常:

App\Driver::selectRaw("CONCAT(first_name,' ',last_name) as fullname ,id")->pluck("fullname", "id") 

谢谢大家。

+0

好吧......感谢你 –