2014-11-16 33 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']; 
} 

希望這有助於