2016-10-19 33 views
11

używam Laravel.5.3 i poniżej jest moje zapytanielaravel Zastosowanie concat metodą zrywać

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

który zgłasza błąd że

Nielegalne offsetowy typu w isset lub pusty

Czy mogę wiedzieć, czy jest to właściwa metoda?

gdybym nie używaj kontakt i używać jak

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

który pracuje poprawne i dając mi prowadzić

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

) 

oczekiwany wynik:

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

) 

gdzie imię i nazwisko jest łączone.

+0

zmienić '-> pluck ('first_name', 'id');' to '-> pluck ('name', 'id') ;? – martincarlin87

+0

@ martincarlin87: SQLSTATE [42S22]: Nie znaleziono kolumny: 1054 Nieznana kolumna "name" w "liście pól" –

+1

hmm, było tylko odgadnięciem ze szczytu mojej głowy, wyobrażam sobie, że 'imię' musi gdzieś tam być ponieważ jest to alias, który jest używany w zapytaniu. Jedyne, co mogę wymyślić to: $ ProjectManagers = Employees :: select ([DB :: raw ("CONCAT (first_name," ", last_name) AS name")]) -> where ("oznaczenie", 1) -> pluck ('name', 'id'); '. Nie użyłem plucka, więc nie jestem pewien, czy możesz poprosić o więcej niż jedną kolumnę, alternatywą wydaje się użycie '-> only (" id "," name ") -> toArray()' – martincarlin87

Odpowiedz

20

Spróbuj zmienić zapytanie wymowne do:

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

Najbardziej eleganckim rozwiązaniem jest stworzenie accessor.

Otwórz twoje Pracownicy klasę (model) i dodać funkcję dostępowej:

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

potem, po prostu użyć:

$ProjectManagers = Employees::where('designation', 1)->get()->pluck('full_name', 'id'); 
+0

Dobrze .. !!!!! –

+0

Nie działa dla mnie – MTS

+0

@MTS czemu nie? powiedz mi więcej, a mojemu mogę pomóc. –

0

I również w obliczu problemu podobnego do przyłączenia zapytanie tutaj jest rozwiązaniem mojego problemu

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