【问题标题】:how put values of two columns in select2 - laravel如何将两列的值放入 select2 - laravel
【发布时间】:2015-12-10 10:41:10
【问题描述】:

我有一个由 select2.js 提供服务的表单

在我的控制器中,我生成一个带有选择内容的变量:

$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。

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

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

谢谢

【问题讨论】:

    标签: php laravel laravel-5.1 jquery-select2


    【解决方案1】:

    试试这个代码,没测试过

    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')列出这两个。

    【讨论】:

    • :) 是的,为了最佳实践,您可以在控制器或存储库中执行此查询(如果您使用存储库模式)。 :)
    • 不幸的是它不起作用。我得到空选择。我尝试过使用和不使用->all() 标签
    • 您是否有选择选项但fullname 的选项文本为空?或者您无法在选择中获得任何选项(无选项)?
    • 选择似乎包含所有选项,但没有文本 - 不过我可以选择空选项。无论如何,SO外面的某个人刚刚帮助了我。请参阅下面的答案。
    【解决方案2】:

    额外的->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();
    

    【讨论】:

      猜你喜欢
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2015-11-24
      • 1970-01-01
      • 2021-10-25
      相关资源
      最近更新 更多