consultas consulta concatenate concatenar columns column campos php mysql laravel laravel-4

php - consulta - Cómo concatenar columnas con Laravel 4 Eloquent?



laravel eloquent limit (4)

Deberías usar DB :: raw () para concaturar los de campo

Tenant::select( ''Tenant_Id'', DB::raw(''CONCAT(First_Name,"-",Last_Name) as full_name'') ) ->orderBy(''First_Name'') ->lists(''full_name'', ''Tenant_Id'');

Tengo una tabla llamada tenantdetails que contiene

Tenant_Id | First_Name | Last_Name | ........

y quiero recuperar First_Name y Last Name como una columna a través de la función de concatenación de MySQL. Así que escribo en mi controller siguiente manera

$tenants = Tenant::orderBy(''First_Name'')->lists(''CONCAT(`First_Name`," ",`Last_Name`)'',''Tenant_Id'');

Pero da como resultado el siguiente error:

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

¿Cómo podemos evitar los backticks al invocar una función de MySQL en Laravel Eloquent? Solo estoy interesado en Eloquent (no en una consulta fluida). Gracias por adelantado.

Actualizar

Gracias a @Andreyco por ayudarme. Podemos lograr esto de una manera más elegante utilizando los modelos de Laravel, como se muestra a continuación:

En nuestro model :

public function getTenantFullNameAttribute() { return $this->attributes[''First_Name''] .'' ''. $this->attributes[''Last_Name'']; }

y en nuestro controller :

$tenants = Tenant::orderBy(''First_Name'')->get(); $tenants = $tenants->lists(''TenantFullName'', ''Tenant_Id'');


Una manera fácil es usar selectRaw . Fue implementado por Tailor en Jan 30, 2014

Source

Tenant::selectRaw(''CONCAT(First_Name, " ", Last_Name) as TenantFullName, id'')->orderBy(''First_Name'')->lists(''TenantFullName'', ''id''))


método lists () utilizado para seleccionar la columna del resultado seleccionado. Por lo tanto, primer nombre de contacto y apellido y dar a esta columna el nuevo nombre de alias en la declaración de selección

$tenants = Tenant::orderBy(''First_Name'')->select(DB::row(''CONCAT(`First_Name`," ",`Last_Name`) as name''),''Tenant_Id'')->lists(''name'', ''id'');

entonces puedes seleccionar este alias en el método lists ()


Tenant::select(''Tenant_Id'', DB::raw(''CONCAT(First_Name, " ", Last_Name) AS full_name'')) ->orderBy(''First_Name'') ->lists(''full_name'', ''Tenant_Id'');