我有一个由select2.js提供服务的表单
在我的控制器中,我生成一个带有选择内容的var:
$gau = array(null => 'Gautor...') + Gauthor::orderBy('surname','asc')->lists('surname', 'id')->all();
在我看来,我这样做:
{!! Form::select('gauthor_id', $gau, Session::get('aut'), array('id'=>'gauthor_id')) !!}
在我的表格中,我有两列:surname
和firstnames
。
在我的Gauthor
模型中,我将它们合并为:
public function getFullnameAttribute()
{
return $this->firstnames . ' ' . $this->surname;
}
以便在我的视图文件中以这种方式$o->fullname
显示值。
我尝试做什么: 我想在我的选择框中看到全名。如何在不创建数据库中具有全名的其他列的情况下执行此操作?
我尝试过:
我尝试用控制器中的surname
替换fullname
,但这太容易了。我收到了SQL错误:Column" fullname"找不到
谢谢
答案 0 :(得分:2)
尝试此代码,没有测试它
Gauthor::selectRaw('id, CONCAT(firstnames, " ", surname) as fullname')
->orderBy('fullname','asc')->lists('fullname', 'id');
selectRaw('id, CONCAT(firstnames, " ", surname) as fullname')
将选择id
和fullname
(以名字和姓氏连接)。然后你可以按->lists('fullname', 'id')
列出这两个。
答案 1 :(得分:0)
额外的->get()
做了神奇的事。整行应如下所示:
$gau = array(null => 'Gautor...') + Gauthor::orderBy('surname','asc')->get()->lists('fullname', 'id')->all();
如果要包含模型的id
,则需要在select2
调用中包含以下选项:
$(document).ready(function() {
$("select").select2({
templateResult: function(state) {
if (!state.id) { return state.text; }
return state.id + ' - ' + state.text;
}
});
});
而不是:
$("select").select2();