web-dev-qa-db-fra.com

Laravel utilisation de concat avec la méthode pluck

J'utilise Laravel.5.3 et ci-dessous est ma requête

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

qui jette une erreur

Type de décalage illégal dans isset ou vide

Puis-je savoir si c'est la bonne méthode?

si je n'utilise pas de contact et utilise comme

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

qui fonctionne correctement et me donne un résultat

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

)

Résultat attendu:

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

)

où le prénom et le nom sont concaténés.

20
Punit Gajjar

Essayez de changer la requête éloquente en:

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

La solution la plus élégante est de créer un accesseur .

Ouvrez votre classe (modèle) Employés et ajoutez une fonction d'accesseur:

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

Après cela, utilisez simplement:

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

J'ai également rencontré un problème comme celui-ci avec la requête de jointure, voici la solution de mon problème

$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