Php 如何在select2-laravel中放置两列的值

Php 如何在select2-laravel中放置两列的值,php,laravel,laravel-5.1,jquery-select2,Php,Laravel,Laravel 5.1,Jquery Select2,我有一张由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'=>'gautho

我有一张由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')) !!}
在我的表中有两列:
姓氏
名字

在我的
Gauthor
模型中,我将它们合并如下:

public function getFullnameAttribute()
{
    return $this->firstnames . ' ' . $this->surname;
}
以便在我的视图文件中以这种方式显示值
$o->fullname

我想做什么: 我想在我的选择框中看到全名。如何在不在我的数据库中创建另一个全名列的情况下执行此操作

我所尝试的: 我试图在控制器中将
姓氏
替换为
全名
,但这太容易了。我收到SQL错误:找不到列“fullname”


谢谢

试试这段代码,我没有测试它

Gauthor::selectRaw('id, CONCAT(firstnames, " ", surname) as fullname')
->orderBy('fullname','asc')->lists('fullname', 'id');
selectRaw('id,CONCAT(firstnames,“,姓氏)作为全名')
将选择
id
fullname
(按firstname和姓氏为CONCAT)。然后你可以通过
->list('fullname','id')
列出这两个列表,一个额外的
->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();

:)是的,为了获得最佳实践,您可以在控制器或存储库中执行此查询(如果您使用的是存储库模式)。:)不幸的是,它不起作用。我得到空的选择。我尝试过使用和不使用
->all()
标记,您是否有选择选项,但选项文本
全名
为空?或者您无法在选择中获得任何选项(无选项)?选择似乎包含所有选项,但没有文本-但我可以选择空选项。总之,外面有人帮了我。见下面我的答案。