web-dev-qa-db-fra.com

Comment concaténer des colonnes avec Laravel 4 Eloquent?

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');
40
manuthalasseril
Tenant::select('Tenant_Id', DB::raw('CONCAT(First_Name, " ", Last_Name) AS full_name'))
    ->orderBy('First_Name')
    ->lists('full_name', 'Tenant_Id');
68
Andreyco

Un moyen simple consiste à utiliser selectRaw. Il a été implémenté par Tailor dans Jan 30, 2014

Source

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

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

3
Phailee Sharma

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');
2
Majbah Habib