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

时间:2015-12-10 10:41:11

标签: 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'=>'gauthor_id')) !!}

在我的表格中,我有两列:surnamefirstnames

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

public function getFullnameAttribute()
{
    return $this->firstnames . ' ' . $this->surname;
}

以便在我的视图文件中以这种方式$o->fullname显示值。

我尝试做什么: 我想在我的选择框中看到全名。如何在不创建数据库中具有全名的其他列的情况下执行此操作?

我尝试过: 我尝试用控制器中的surname替换fullname,但这太容易了。我收到了SQL错误:Column" fullname"找不到

谢谢

2 个答案:

答案 0 :(得分:2)

尝试此代码,没有测试它

Gauthor::selectRaw('id, CONCAT(firstnames, " ", surname) as fullname')
->orderBy('fullname','asc')->lists('fullname', 'id');

selectRaw('id, CONCAT(firstnames, " ", surname) as fullname')将选择idfullname (以名字和姓氏连接)。然后你可以按->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();