我有一个名为Eloquent的雄辩模型:
Products::where("actice", "=", true)->get()->toArray();
现在我想为它添加join-statement,我已经用:
定义了一个scopeQuerypublic function scopeJoinWithTags($query)
{
return $query->leftJoin("tags", "tags.id", "=", "products.tag_id");
}
然后我们的主要查询更改为:
Products::where("actice", "=", true)->joinWithTags->get()->toArray();
我得到的是好的,这是我所期望的,但是我想将tags表的name属性更改为tag_name,我应该怎么做?我的意思是,我在我的询问中说:
tags.name AS tag_name
所以在最后的结果数组中我做了:
$result[$i]['tag_name'];
现在我必须:
$result[$i]['name'];
答案 0 :(得分:41)
最简单的方法是将get()
方法所需的字段添加到您想要重命名的字段中。
Products::where("actice", "=", true)
->joinWithTags
->get(['tags.name AS tag_name', 'products.*'])
->toArray();
答案 1 :(得分:8)
在Laravel 5.4上(我不知道早期版本是否也适用)你可以用select
方法做到这一点:
Products::where("actice", "=", true)
->joinWithTags
->select('tags.name AS tag_name', 'products.*')
->get();
至少对我来说这更清洁。
答案 2 :(得分:5)
还有一种更清洁的方法来实现这个目标
你可以利用laravel mutators
public function getTagNameAttribute()
{
return $this->attributes['name'];
}
希望这有帮助