2014-11-16 86 views
15

别名列的名字,我有一个名为口才雄辩的模型:如何雄辩

Products::where("actice", "=", true)->get()->toArray(); 

现在我想补充加入语句吧,我已经定义了一个scopeQuery有:

public function scopeJoinWithTags($query) 
    { 
     return $query->leftJoin("tags", "tags.id", "=", "products.tag_id"); 
    } 

那么,我们的主查询更改为:

Products::where("actice", "=", true)->joinWithTags->get()->toArray(); 

我得到的是好的,这是我所期望的,但我想改名字标记表的属性tag_name,我应该怎么做?我的意思是,我在查询某说:

tags.name AS tag_name 

所以最后的结果数组中我做的:

$result[$i]['tag_name']; 

虽然现在我要:

$result[$i]['name']; 
+0

可能重复[http://stackoverflow.com/questions/一个更清洁的方式17174837/laravel-4-eloquent-column-alias](http://stackoverflow.com/questions/17174837/laravel-4-eloquent-column-alias) – itachi

回答

24

的最简单方法要做到这一点将是你需要的字段添加到get()方法和别名你想在那里重命名。

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->get(['tags.name AS tag_name', 'products.*']) 
    ->toArray(); 
+0

你能告诉我什么是第二个参数吗? 'actice。*''?我已将其更改为'products。*'并且它可以工作。 –

+2

哎呀抱歉,是的,它应该是产品。* 它只是意味着包括您的产品表的所有领域。 – turntwo

+0

这是我使用的方法,但应该注意的是,其他框架通过关联数组来处理这种情况。遗憾的是这是Laravel所没有的。 – dKen

0

在Laravel 5.4(我不知道,如果早期版本同样适用),你可以做到这一点与select方法:

Products::where("actice", "=", true) 
    ->joinWithTags 
    ->select('tags.name AS tag_name', 'products.*') 
    ->get(); 

至少对我来说这是清洁。

+0

如何重命名产品表? –

0

还有实现这个

您可以laravel存取器的优势

public function getTagNameAttribute() 
{ 
    return $this->attributes['name']; 
} 

希望这有助于