質問編集履歴
5
諸々修正
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
タイトル編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
コメントのステータスが全て同じ状態である投稿の件数を取得したい
|
1
|
+
投稿に紐付くコメントのステータスが全て同じ状態(例えば公開中)である投稿の件数を取得したい
|
test
CHANGED
File without changes
|
3
タイトル編集
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
コメントのステータスが全て同じ状態である投稿の件数を取得したい
|
test
CHANGED
File without changes
|
2
ソース種類や、タイトル編集
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
内容を分かり易く修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
いつもお世話になっております。
|
2
|
-
表題の通りなのですが、例として良くあるユーザ→投稿→コメント
|
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
|
-
|
21
|
+
上記を表現するリレーション定義は既にモデルに記述していると仮定します。
|
20
22
|
|
21
23
|
- 試行中のソース
|
22
24
|
```
|
23
25
|
※$postはpostモデルとなります。
|
24
26
|
$post->whereHas('comments', function (Builder $builder) {
|
25
|
-
$builder->whereDoesntHave('
|
27
|
+
$builder->whereDoesntHave('commentStatus', function (Builder $builder) {
|
26
28
|
$builder->where('id', '<>', ※ここで特定のステータスを指定);
|
27
29
|
});
|
28
30
|
})->count();
|