关于 php:如何使用 Laravel 4 Eloquent 连接列?

How to concatenate columns with Laravel 4 Eloquent?

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

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

我想通过 MySQL 的连接函数将 First_NameLast Name 作为一列检索。所以我在我的 controller 中写如下

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

但结果如下错误:

1
2
3
4
5
6
7
 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:

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

和我们的 controller:

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


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


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

中实现的

来源

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

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

中为该列提供新的别名

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

那么你可以在lists()方法中选择这个别名


你应该使用 DB::raw() 来连接那些字段

1
2
3
4
5
6
7
Tenant::select(
          'Tenant_Id',
          DB::raw('CONCAT(First_Name,"-",Last_Name) as full_name')

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

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

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

希望对您有所帮助:)