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

Questions:

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 :

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

While now I have to :

$result[$i]['name'];
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)
    ->joinWithTags
    ->get(['tags.name AS tag_name', 'products.*'])
    ->toArray();

Answer:

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)
    ->joinWithTags
    ->select('tags.name AS tag_name', 'products.*')
    ->get();

At least for me this is cleaner.

Answer:

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