2014-02-25 78 views
38

我有一个名为tenantdetails表包含如何连接列与Laravel 4雄辩?

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

,我想找回First_NameLast Name为通过的MySQL连接函数一列。所以我写在我的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). 

我们怎样才能避免反引号,而调用的MySQL在Laravel雄辩的功能。我只对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'); 
+0

这个模型的解决方案非常棒。这是在任何地方的文档? –

+0

@Kyle Ridolfo。谢谢。其实我忘记了解决方案的来源。但是我确信,直到那天我搜索解决方案的时候,它不在文档中。 – manuthalasseril

回答

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

有没有可能做到这一点只与雄辩orm – manuthalasseril

+1

我是一个初学者laravel。我认为它是Fluent Query Builder与雄辩的结合。我错了吗? – manuthalasseril

+0

这是雄辩。在雄辩中,你可以使用Fluent的一切。但无论如何,它仍然是雄辩的。为什么这对你不够? – Andreyco

7

的简单的方法是使用selectRaw。它是由在定制Jan 30, 2014

用来选择来自选择的结果列Source

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

列表()方法来实现。因此,首先接触的姓氏和名字,并给予新的别名此列在select语句

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

,那么你可以选择列表中的)这个别名(方法

2

您应该使用DB ::生()来连接那些字段

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

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