いつもお世話になっております。
表題の通りなのですが、例として良くあるユーザ→投稿→コメントと、コメントテーブルが持つコメントステータスのような4テーブルがあると仮定して、
投稿に紐付くコメントのステータスが特定の状態以外(公開・非公開・下書き等あるとすれば、例として公開状態以外のコメント)である投稿の件数を取得するにはどのようにするべきでしょうか。
リレーションを持つものに絞り込む方法として、Eloquentが拡張しているクエリビルダのメソッドでwhereHas()
whereDoesntHave()
等が良く使われると思いますが、特定の条件であるリレーションを取得する、ではなく、リレーションを持ち、かつ全て特定の状態でない親元の件数(ここでは投稿数)を取得する最善の方法が浮かばない状況でして、ご教示頂ける方がおられると幸いです。
何卒宜しくお願い致します。
- テーブル
投稿posts
id
user_id(users.id参照ですが、今回は省略)
コメントステータスstatuses
id
コメントcomments
id
post_id(posts.id参照)
status_id(statuses.id参照)
上記を表現するリレーション定義は既にモデルに記述していると仮定します。
- 試行中のソース(下記の記述で特定のステータス以外のステータスモデルを持たないコメント、、というような解釈にはならないのでしょうかね。。)
php
1※$postはpostモデルとなります。 2$post->whereHas('comments', function (Builder $builder) {// ※追記 ここのブロックもwhereDoesntHave()にするともしかしてヒットするかも... 3 $builder->whereDoesntHave('commentStatus', function (Builder $builder) { 4 $builder->where('id', '<>', ※ここで公開のステータスを指定); 5 }); 6})->count();
- 環境
Laravel6.x
MySQL8.x
あなたの回答
tips
プレビュー