Как псевдоним имени столбца в Eloquent

У меня есть красноречивая модель с именем Eloquent:

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

Теперь я хочу добавить к нему join-statement, я определил scopeQuery с:

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

Затем наш основной запрос изменится на:

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

Я получаю все в порядке, это то, чего я ожидаю, но я хочу изменить свойство name таблицы тегов на tag_name, как мне это сделать? Я имею в виду, я скажу где-то в своем запросе:

  tags.name AS tag_name 

Так что в конечном массиве результатов я делаю:

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

Пока я должен:

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

Solutions Collecting From Web of "Как псевдоним имени столбца в Eloquent"

Самый простой способ сделать это – добавить поля, которые вам нужны, к методу get() и псевдоним тех, которые вы хотите переименовать.

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

В Laravel 5.4 (я не знаю, применим ли предыдущая версия), вы можете сделать это с помощью метода select :

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

По крайней мере, для меня это чище.

Существует также более чистый способ достичь этого

Вы можете использовать мутаторы laravel

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

Надеюсь это поможет