dotnetdeveloperboi
dotnetdeveloperboi

Reputation: 25

Laravel Eloquent model with counter

I'm trying to count all the files within a category, and I have these two relationships:

public function files() { return $this->hasMany('App\File', 'category_id','category_id'); } public function fileCount() { return $this->files()->selectRaw("category_id, count(*) AS count") ->groupBy('category_id'); }

This gives me a collection of items, where the count attribute could be accessed like this: $my_category = Category::where("category_id", category_id)->with('fileCount')->get(); $file_counter = $my_category->first()->fileCount->first()->count;

Is it possible to directly attach the count attribute to the $my_category variable? Any suggestions will be appreciated.

Upvotes: 1

Views: 1134

Answers (1)

Alexey Mezenin
Alexey Mezenin

Reputation: 163768

You can use withCount() method:

$my_category = Category::where("category_id", category_id)
                       ->withCount(['files' => function($q) {
                           $q->groupBy('category_id');
                       })
                       ->get();

This will put files_count attribute into results.

If you want to count the number of results from a relationship without actually loading them you may use the withCount method, which will place a {relation}_count column on your resulting models

Upvotes: 1

Related Questions