У меня есть таблица под названием tenantdetails
которая содержит
Tenant_Id | First_Name | Last_Name | ........
и я хочу получить First_Name
и Last Name
как один столбец через функцию конкатенации MySQL. Поэтому я пишу в своем controller
следующим образом
$tenants = Tenant::orderBy('First_Name')->lists('CONCAT(`First_Name`," ",`Last_Name`)','Tenant_Id');
Но приводит к следующей ошибке:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`," ",`First_Name`)`, `Id` from `tenantdetails` order by `F' at line 1 (SQL: select `CONCAT(`First_Name`," ",`Last_Name`)`, `Id` from `tenantdetails` order by `First_Name` asc).
Как мы можем избежать обратных шагов при вызове функции MySQL в Laravel Eloquent. Меня интересует только Eloquent (не в беглом запросе). Заранее спасибо.
Обновить
Спасибо @ Andreyco за помощь мне. Мы можем добиться этого более элегантным способом с использованием моделей Laravel, как показано ниже:
В нашей model
:
public function getTenantFullNameAttribute() { return $this->attributes['First_Name'] .' '. $this->attributes['Last_Name']; }
и в нашем controller
:
$tenants = Tenant::orderBy('First_Name')->get(); $tenants = $tenants->lists('TenantFullName', 'Tenant_Id');
Tenant::select('Tenant_Id', DB::raw('CONCAT(First_Name, " ", Last_Name) AS full_name')) ->orderBy('First_Name') ->lists('full_name', 'Tenant_Id');
selectRaw
способом является использование selectRaw
. Это было реализовано Tailor в Jan 30, 2014
Источник
Tenant::selectRaw('CONCAT(First_Name, " ", Last_Name) as TenantFullName, id')->orderBy('First_Name')->lists('TenantFullName', 'id'))
lists (), который используется для выбора столбца из выбранного результата. Итак, сначала свяжитесь с именем и фамилией и дайте этому столбцу новое имя псевдонима в select statement
$tenants = Tenant::orderBy('First_Name')->select(DB::row('CONCAT(`First_Name`," ",`Last_Name`) as name'),'Tenant_Id')->lists('name', 'id');
то вы можете выбрать этот псевдоним в методах lists ()
Вы должны использовать DB :: raw () для согласования поля
Tenant::select( 'Tenant_Id', DB::raw('CONCAT(First_Name,"-",Last_Name) as full_name') ) ->orderBy('First_Name') ->lists('full_name', 'Tenant_Id');