Laravel - Relationships - Counting Related Models

Sometimes you may want to count the number of related models for a given relationship without actually loading the models. To accomplish this, you may use the withCount method. The withCount method will place a {relation}_count attribute on the resulting models:

    use App\Models\Post;
    $posts = Post::withCount('comments')->get();
    foreach ($posts as $post) {
        echo $post->comments_count;

By passing an array to the withCount method, you may add the "counts" for multiple relations as well as add additional constraints to the queries:

    use Illuminate\Database\Eloquent\Builder;
    $posts = Post::withCount(['votes', 'comments' => function (Builder $query) {
        $query->where('content', 'like', 'code%');
    echo $posts[0]->votes_count;
    echo $posts[0]->comments_count;

You may also alias the relationship count result, allowing multiple counts on the same relationship:

    use Illuminate\Database\Eloquent\Builder;
    $posts = Post::withCount([
        'comments as pending_comments_count' => function (Builder $query) {
            $query->where('approved', false);
    echo $posts[0]->comments_count;
    echo $posts[0]->pending_comments_count;