ホーム > Laravel > Laravelでリレーション先の数の合計を数えて一覧に表示する方法【withCount】
Laravel

Laravelでリレーション先の数の合計を数えて一覧に表示する方法【withCount】

いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。

⇨ Laravel 記事の目次はこちら

Laravel でリレーション先の数の合計を数えて一覧に表示する方法をやっていきます。withCount を使えば簡単に出来ます。

どんなときに使う可能性がある?

例えば、

① ユーザーに紐づく Post の数をユーザーの一覧に表示したいとき。(⇦ 今回はこれやります。)

② 一覧にいいね数やフォロー数を表示したいとき。

この記事の内容は公式ドキュメントの要約となります

検証環境

Laravel 6

リレーション先の合計を数える

今回は、「ユーザーが投稿した posts がいくつあるか」の合計をユーザー一覧に表示します。

このようにユーザー1人に対して posts が多数ある場合は、1対多のリレーションをすれば OK です。

1対多のリレーションについては、

⇨Laravel で1対多のリレーションをして保存、表示する方法【hasMany】

でまとめています。

モデルにリレーションを書きます。

User.php

    public function posts()
    {
        return $this->hasMany('App\Post');
    }

コントローラーに書きます。

Controller

    public function index()
    {
        $users = User::withCount('posts')->take(5)->get();
        dd($users);
    }

dd で出力した結果は、ユーザーの一覧が出力されるわけですが、

ユーザー一人一人のデータがこちらのスクショの通りになります。

withcountの出力結果

このように、

posts_count => 100

というように、「リレーション関数名_count」という key 名で、リレーション先の合計数が含まれています。

めっちゃ便利で笑う。

⇨Laravel の withCount が取得できないを解決する方法

まとめ

いかがだったでしょうか?

withcount を使って、リレーション先の合計数を数えてみました。

ところで、Laravel8 に対応した本が出ているみたいです。

Laravel の本を買う予定なら、これがいいんじゃないでしょうか?

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

関連記事

Laravel で1対多のリレーションをして保存、表示する方法【hasMany】

Laravel で多対1のリレーションをして保存、表示する方法【belongsTo】

Laravel で1対1のリレーションをする方法。【hasOne】

Laravel で多対多のリレーションをして保存、表示する方法【belongsToMany】