web-dev-qa-db-ja.com

列をLaravel 4 Eloquentと連結するには?

次を含むtenantdetailsというテーブルがあります

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

そして、MySQLの連結関数を介してFirst_NameLast Nameを1つの列として取得したい。だから私は私の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).

Laravel雄弁。

更新

私を助けてくれた@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');
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

簡単な方法は、selectRawを使用することです。 TailorによってJan 30, 2014に実装されました

ソース

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

選択した結果から列を選択するために使用するlists()メソッド。最初の名前と姓を最初に連絡し、selectステートメントでこの列に新しいエイリアス名を付けます

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

次に、lists()メソッドでこのエイリアスを選択できます

3
Phailee Sharma

DB :: raw()を使用して、フィールドのものを連結する必要があります

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