Home » Php » php – How to alias the name of a column in Eloquent

php – How to alias the name of a column in Eloquent

Posted by: admin April 23, 2020 Leave a comment


I have an eloquent model named Eloquent:

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

Now I want to add join-statement to it, I have defined a scopeQuery with:

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

Then our main query changes to:

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

What I get is OK, it is what I do expect, but I want to change the name property of tags table to tag_name, how should I do that? I mean, i say somewhere in my query to:

 tags.name AS tag_name

So that in the final result array I do :


While now I have to :

How to&Answers:

Simplest way to do this would be to add the fields you need to the get() method and alias the ones you want to rename there.

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


On Laravel 5.4 (I don’t know if earlier version also apply) you can do that with the select method:

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

At least for me this is cleaner.


There is also a cleaner way to achieve this

You can take advantage of laravel mutators

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

Hope this helps