質問編集履歴

5

諸々修正

2022/03/10 16:58

投稿

wonda
wonda

スコア69

test CHANGED
@@ -1 +1 @@
1
- 投稿に紐付くコメントのステータスが全て同じ状態(例えば公開である投稿の件数を取得したい
1
+ 投稿に紐付くコメントのうち、ステータスが存在、かつ全て特定以外の状態である(例えば公開状態のコメントを含まない)投稿の件数を取得したい
test CHANGED
@@ -1,8 +1,8 @@
1
1
  いつもお世話になっております。
2
2
  表題の通りなのですが、例として良くあるユーザ→投稿→コメントと、コメントテーブルが持つコメントステータスのような4テーブルがあると仮定して、
3
- 投稿に紐付くコメントのステータスが全て同じ(公開・非公開あるとすれば、例として全て公開状態のコメント)である投稿の件数を取得するにはどのようにするべきでしょうか。
3
+ 投稿に紐付くコメントのステータスが特定の状態以外(公開・非公開・下書き等あるとすれば、例として公開状態以外のコメント)である投稿の件数を取得するにはどのようにするべきでしょうか。
4
4
 
5
- リレーションを持つものに絞り込む方法として、Eloquentが拡張しているクエリビルダのメソッドで`whereHas()`が良く使われると思いますが、特定の条件であるリレーションを取得する、ではなく、リレーション先の条件が全て特定の状態である親元の件数(ここでは投稿数)を取得する最善の方法が浮かばない状況でして、ご教示頂ける方がおられると幸いです。
5
+ リレーションを持つものに絞り込む方法として、Eloquentが拡張しているクエリビルダのメソッドで`whereHas()` `whereDoesntHave()`等が良く使われると思いますが、特定の条件であるリレーションを取得する、ではなく、リレーションを持ち、かつ全て特定の状態でない親元の件数(ここでは投稿数)を取得する最善の方法が浮かばない状況でして、ご教示頂ける方がおられると幸いです。
6
6
  何卒宜しくお願い致します。
7
7
 
8
8
  - テーブル
@@ -23,9 +23,9 @@
23
23
  - 試行中のソース(下記の記述で特定のステータス以外のステータスモデルを持たないコメント、、というような解釈にはならないのでしょうかね。。)
24
24
  ```php
25
25
  ※$postはpostモデルとなります。
26
- $post->whereHas('comments', function (Builder $builder) {
26
+ $post->whereHas('comments', function (Builder $builder) {// ※追記 ここのブロックもwhereDoesntHave()にするともしかしてヒットするかも...
27
27
  $builder->whereDoesntHave('commentStatus', function (Builder $builder) {
28
- $builder->where('id', '<>', ※ここで特定のステータスを指定);
28
+ $builder->where('id', '<>', ※ここで公開のステータスを指定);
29
29
  });
30
30
  })->count();
31
31
  ```

4

タイトル編集

2022/03/10 16:45

投稿

wonda
wonda

スコア69

test CHANGED
@@ -1 +1 @@
1
- コメントのステータスが全て同じ状態である投稿の件数を取得したい
1
+ 投稿に紐付くコメントのステータスが全て同じ状態(例えば公開中)である投稿の件数を取得したい
test CHANGED
File without changes

3

タイトル編集

2022/03/10 16:45

投稿

wonda
wonda

スコア69

test CHANGED
@@ -1 +1 @@
1
- リレーショのステータスが全て同じののものの親元の件数を取得したい
1
+ コメのステータスが全て同じ状態である投稿の件数を取得したい
test CHANGED
File without changes

2

ソース種類や、タイトル編集

2022/03/10 16:43

投稿

wonda
wonda

スコア69

test CHANGED
@@ -1 +1 @@
1
- リレーション先が同じの条件のものの件数を取得したい
1
+ リレーション先のステータス全て同じの条件のものの親元の件数を取得したい
test CHANGED
@@ -20,15 +20,14 @@
20
20
 
21
21
  上記を表現するリレーション定義は既にモデルに記述していると仮定します。
22
22
 
23
- - 試行中のソース
23
+ - 試行中のソース(下記の記述で特定のステータス以外のステータスモデルを持たないコメント、、というような解釈にはならないのでしょうかね。。)
24
- ```
24
+ ```php
25
25
  ※$postはpostモデルとなります。
26
26
  $post->whereHas('comments', function (Builder $builder) {
27
27
  $builder->whereDoesntHave('commentStatus', function (Builder $builder) {
28
28
  $builder->where('id', '<>', ※ここで特定のステータスを指定);
29
29
  });
30
30
  })->count();
31
- 上記は特定のステータス以外のステータスモデルを持たないコメント、、というような解釈にはならないのでしょうかね。。
32
31
  ```
33
32
 
34
33
  - 環境

1

内容を分かり易く修正

2022/03/10 16:14

投稿

wonda
wonda

スコア69

test CHANGED
File without changes
test CHANGED
@@ -1,5 +1,5 @@
1
1
  いつもお世話になっております。
2
- 表題の通りなのですが、例として良くあるユーザ→投稿→コメントコメントステータスのような4テーブルがあると仮定して、
2
+ 表題の通りなのですが、例として良くあるユーザ→投稿→コメントと、コメントテーブルが持つコメントステータスのような4テーブルがあると仮定して、
3
3
  投稿に紐付くコメントのステータスが全て同じ(公開・非公開とあるとすれば、例として全て公開状態のコメント)である投稿の件数を取得するにはどのようにするべきでしょうか。
4
4
 
5
5
  リレーションを持つものに絞り込む方法として、Eloquentが拡張しているクエリビルダのメソッドで`whereHas()`が良く使われると思いますが、特定の条件であるリレーションを取得する、ではなく、リレーション先の条件が全て特定の状態である親元の件数(ここでは投稿数)を取得する最善の方法が浮かばない状況でして、ご教示頂ける方がおられると幸いです。
@@ -10,19 +10,21 @@
10
10
  id
11
11
  user_id(users.id参照ですが、今回は省略)
12
12
 
13
+ コメントステータス`statuses`
14
+ id
15
+
13
16
  コメント`comments`
14
17
  id
15
18
  post_id(posts.id参照)
19
+ status_id(statuses.id参照)
16
20
 
17
- コメントステータス`statuses`
18
- id
19
- comment_id(comments.id参照)
21
+ 上記を表現するリレーション定義は既にモデルに記述していると仮定します。
20
22
 
21
23
  - 試行中のソース
22
24
  ```
23
25
  ※$postはpostモデルとなります。
24
26
  $post->whereHas('comments', function (Builder $builder) {
25
- $builder->whereDoesntHave('statuses', function (Builder $builder) {
27
+ $builder->whereDoesntHave('commentStatus', function (Builder $builder) {
26
28
  $builder->where('id', '<>', ※ここで特定のステータスを指定);
27
29
  });
28
30
  })->count();