2017-04-18 67 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

好吧......感謝你 –