如何使用Laravel 4 Eloquent连接列?

时间:2014-02-25 08:29:03

标签: php mysql laravel laravel-4

我有一个名为tenantdetails的表,其中包含

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

我希望通过MySQL的串联功能将First_NameLast Name检索为一列。所以我在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 Eloquent中调用MySQL函数时避免反引号。我只对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');

5 个答案:

答案 0 :(得分:67)

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

答案 1 :(得分:7)

一种简单的方法是使用selectRaw。它由Tailor在Jan 30, 2014

中实施

Source

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

答案 2 :(得分:3)

lists()方法用于从所选结果中选择列。因此,首先联系名字和姓氏,并在select语句

中为此列添加新别名
 $tenants = Tenant::orderBy('First_Name')->select(DB::row('CONCAT(`First_Name`," ",`Last_Name`) as name'),'Tenant_Id')->lists('name', 'id');

然后你可以在lists()方法

中选择这个别名

答案 3 :(得分:2)

您应该使用 DB :: raw()来连接字段

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

        )
       ->orderBy('First_Name')
       ->lists('full_name', 'Tenant_Id');

答案 4 :(得分:1)

您也可以使用查询生成器来执行此操作 喜欢:

DB::table('Tenant')
->selectRaw('CONCAT(First_Name, " - ", Last_Name) as fullName, id')
->get();

希望对您有所帮助:)