J'ai une table appelée tenantdetails
qui contient
Tenant_Id | First_Name | Last_Name | ........
et je veux récupérer First_Name
et Last Name
en une seule colonne via la fonction de concaténation de MySQL. J'écris donc dans mon controller
comme suit
$tenants = Tenant::orderBy('First_Name')->lists('CONCAT(`First_Name`," ",`Last_Name`)','Tenant_Id');
Mais entraîne l'erreur suivante:
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).
Comment éviter les backticks en appelant une fonction de MySQL dans Laravel Eloquent. Je ne m'intéresse qu'à Eloquent (pas en requête courante). Merci d'avance.
Mise à jour
Merci à @Andreyco de m'avoir aidé. Nous pouvons y parvenir de manière plus élégante en utilisant les modèles Laravel, comme ci-dessous:
Dans notre model
:
public function getTenantFullNameAttribute()
{
return $this->attributes['First_Name'] .' '. $this->attributes['Last_Name'];
}
et dans notre 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');
Un moyen simple consiste à utiliser selectRaw
. Il a été implémenté par Tailor dans Jan 30, 2014
Tenant::selectRaw('CONCAT(First_Name, " ", Last_Name) as TenantFullName, id')->orderBy('First_Name')->lists('TenantFullName', 'id'))
listes () méthode utilisée pour sélectionner la colonne du résultat sélectionné. Donc, contactez d'abord le prénom et le nom et donnez cette colonne avec le nouveau nom d'alias dans l'instruction select
$tenants = Tenant::orderBy('First_Name')->select(DB::row('CONCAT(`First_Name`," ",`Last_Name`) as name'),'Tenant_Id')->lists('name', 'id');
alors vous pouvez sélectionner cet alias dans la méthode lists ()
Vous devez utiliser DB :: raw () pour concaténer ceux du champ
Tenant::select(
'Tenant_Id',
DB::raw('CONCAT(First_Name,"-",Last_Name) as full_name')
)
->orderBy('First_Name')
->lists('full_name', 'Tenant_Id');