2016-10-19 16 views
11

Я использую Laravel.5.3 и ниже мой запросLaravel использование CONCAT методом срывать

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

, который выдает ошибку, что

Illegal тип смещения в Исеть или пустой

Могу ли я узнать, правильный ли это метод?

, если я не использую контакт и использовать как

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

) 

где первое имя и фамилия объединяется.

+0

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

+0

@ martincarlin87: SQLSTATE [42S22]: Колонка не найдена: 1054 Неизвестная колонка 'name' в 'списке полей' –

+1

hmm, была просто угадана с моей головы, я думаю, что «имя» должно было быть где-то там поскольку это псевдоним, который используется в запросе. Единственное, что я могу придумать, это '$ ProjectManagers = Employees :: select ([DB :: raw (" CONCAT (first_name, "", last_name) AS name ")])>> где ('обозначение', 1) -> pluck ('name', 'id'); '. Я не использовал pluck, поэтому не уверен, что вы можете запросить более одного столбца, альтернативой, по-видимому, является использование только '-> (« id »,« name ») -> toArray()' – martincarlin87

ответ

20

Попробуйте изменить красноречивый запрос:

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

Самое элегантное решение заключается в создании accessor.

Открой Сотрудники класс (модель) и добавить функцию доступа:

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

После этого, просто использовать:

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

Хороший .. !!!!! –

+0

Не работал для меня – MTS

+0

@MTS почему бы и нет? Скажи мне больше, и я могу помочь. –

0

Я также столкнулся с такой проблемой, как это с присоединиться запрос здесь является решением моей проблемы

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