Laravelselect を後ろに書くと
LaravelのwithCountが取得できないを解決する方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
オススメ本
Laravel でリレーションはうまくいっているのに、withCount が取得できなかったときがあったので解決方法について書いています。
select を後ろに書くとwithCount
を取得できない
成功する例
$posts = Post::select('title')
->withCount('likes') //selectの後に書くと取得可能
->get();
失敗する例
$posts = Post::withCount('likes') //selectの前に書くと不可
->select('title')
->get();
このようにselect
の前に withCount を書くと取得できません。
なぜこの問題が起こるのか
select()
メソッドは、クエリで取得するカラムを指定します。
withCount()
がクエリにlikes_count
を追加した後に、select()
を使うと、そのselect()
によってlikes_count
が除外されてしまうことが原因です。
そのため、select()
を先に指定してクエリを構築する必要があります。
withCount の基本的な書き方
こちらの記事に詳しく書いてあります。
⇨Laravel でリレーション先の数の合計を数えて一覧に表示する方法【withCount】
リレーション方法が間違っているかもしれないとき
リレーションの方法については、別の記事にできるだけ分かりやすいを意識して書いた記事がありますので、そちらをご参照ください。
Laravel で1対1のリレーションをする方法。【hasOne】
Laravel で1対多のリレーションをして保存、表示する方法【hasMany】
Laravel で多対1のリレーションをして保存、表示する方法。1対多のときの逆【belongsTo】
Laravel で多対多のリレーションをして保存、表示する方法【belongsToMany】
以上です。
誰かの参考になれば幸いです。
フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。