sebap
sebap

Reputation: 1691

Laravel Eloquent: how to add a column to a query response?

In other words, lets say i have a query like that:

return Location::valid()
    ->with('owners', 'gardeners')
    ->withCount('gardeners')
    ->get();

that returns some json :

[
 {
   name: 'LocationA',
   nb_gardeners_max: 3,
   owners: [...],
   garderners: [...],
   garderners_count: 2
 }
]

in the json response i'd like to add some custom entry like is_full and available_places:

[
 {
   name: 'LocationA',
   nb_gardeners_max: 3,
   owners: [...],
   garderners: [...],
   garderners_count: 2,
   ...
   is_full: false,
   available_places: 1
 }
]

I guess it has something to do with raw / join / aggregate... but i really don't understand how to do so. Any help will be greatly appreciated

EDIT

Minhajul answer is really usefull but it's not possible to do a WHERE clause on the appended attribute.

Location::where('is_full',true)->get() // NOT WORKING

Though it's still possible to do filter() on it, I'd like to use a JOIN for that to perform a single query

Upvotes: 0

Views: 2374

Answers (1)

MD Minhajul ISLAM
MD Minhajul ISLAM

Reputation: 179

To do so, you can add attributes that do not have a corresponding column in your database.To do this, all you need to modify your model

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

After creating this accessor, you need to add this in your model.

 protected $appends = ['is_full'];

Hopefully, it will help you.

Upvotes: 5

Related Questions