web-dev-qa-db-ja.com

Laravel pluckメソッドでのconcatの使用

私はLaravel.5.3を使用していますが、以下は私のクエリです

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

エラーをスローします

Issetまたは空の不正なオフセットタイプ

これが正しい方法かどうか知っていますか?

私は連絡先を使用しないで、

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

)

ここで、名と姓が連結されます。

20
Punit Gajjar

雄弁なクエリを次のように変更してみてください。

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

最もエレガントな解決策は、 accessor を作成することです。

Employeesクラス(モデル)を開き、アクセサー関数を追加します。

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

その後、単に使用するだけです:

$ProjectManagers = Employees::where('designation', 1)->get()->pluck('full_name', 'id');
30
Blaž Oražem

また、ここでの結合クエリでの問題は私の問題の解決策です

$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');
1
Hasib Kamal