Use withCount() to Calculate Child Relationship Records

You can use the withCount() method to calculate (get the number of records) the child relationships records in Laravel.

Answers 1
  • Get number of records with relationships in Laravel Eloquent using withCount() method

    //app\Http\Controllers\<YourController>.php
    public function index()
    {
        $posts = Post::withCount(['comments'])->get();
        return view('posts', compact('posts'));
    }
    
    //resources\view\posts.blade.php
    <table>
        @foreach ($posts as $post)
        <tr>
            <td>Post <b> {{ $post->title }} </b>  has <b> {{ $post->comments_count }} </b> comments </td>
        </tr>
        @endforeach
    </table>
    
    //app\Models\Post.php
    public function comments()
    {
        return $this->hasMany('App\Models\Comment');
    }
    
    0

    You can get the relationship records count without loading data using withCount() method. You have to first define the comments method with hasMany relationship in your post model. If you don’t know how to create hasMany relation you can find it here laravel hasMany method. After that you can call withCount() method on comments method which returns you the number of comments associated with this particular post without actually loading them (data from relationship table). 

    This code snippet has been tested and it's working in laravel 8. First you have to define a route in web file, create a hasMany relationship method (comments) in post model, create a method in controller file and return data to view and after that dispaly data in view file.

     

    Post Quibusdam ipsam est nihil explicabo. has 3 comments
    Post Inventore cupiditate dolores officiis enim accusantium. has 4 comments
    Post Ea delectus et incidunt. has 1 comments
    Post Excepturi ducimus quo sapiente nesciunt amet. has 1 comments
    Post Asperiores maxime maiores sed. has 1 comments
  • Back to code snippet queries related laravel