26

我正在使用 Laravel.5.3,以下是我的查询

$ProjectManagers = Employees::where("designation" , 1)
->pluck(DB::raw('CONCAT(first_name," ",last_name) AS name'),'id');

这会引发一个错误

isset 中的非法偏移类型或为空

我可以知道这是否是正确的方法吗?

如果我不使用联系方式并使用 like

$ProjectManagers = Employees::where("designation" , 1)->pluck('first_name','id');

这是正确的并给了我结果

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [8] => Punit
        )

)

预期结果 :

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [8] => Punit Gajjar
        )

)

其中名字和姓氏连接在一起。

4

4 回答 4

53

最优雅的解决方案是创建一个访问器

打开您的员工类(模型)并添加一个访问器函数:

public function getFullNameAttribute()
{
    return $this->first_name . ' ' . $this->last_name;
}

之后,只需简单地使用:

$ProjectManagers = Employees::where('designation', 1)->get()->pluck('full_name', 'id');
于 2017-08-18T11:21:16.823 回答
51

尝试将 eloquent 查询更改为:

$ProjectManagers = Employees::select(
            DB::raw("CONCAT(first_name,' ',last_name) AS name"),'id')
            ->where('designation', 1)
            ->pluck('name', 'id');
于 2016-10-19T13:35:51.853 回答
3

如果您的列可以为空,那么您应该试试这个

NULL空字符串的值转换为COALESCE

$ProjectManagers = Employees::select(
            DB::raw("CONCAT(COALESCE(`first_name`,''),' ',COALESCE(`last_name`,'')) AS name"),'id')
            ->where('designation', 1)
            ->pluck('name', 'id')
            ->toArray();
于 2020-06-15T04:09:20.207 回答
2

我也遇到了这样的问题,加入查询是我的问题的解决方案

$studentDegree = Student::leftJoin('degree','degree.student_id','=','student.id')
->select(
      DB::raw("CONCAT(student.name,'-',degree.name) AS name_degree"),
      'student.id'
)->lists('name_degree','id');
于 2018-01-30T08:32:06.467 回答