2014-11-16 4 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

Это метод, который я использовал, но следует отметить, что другие структуры обрабатывают это изначально ассоциативными массивами. Жаль, что это не осталось из Ларавеля. – 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']; 
} 

Надеется, что это помогает

Смежные вопросы