私はカウントが必要です。結果を取得したり、各行ごとにクエリを実行する必要はありません。これが私が熱心なロードを望む理由です。
熱心な読み込みとhasManyThrough関係から数えてください(数のみ必要です)
Admins
id
Posts
id
admin_id
Comments
id
user_id //nullable (null if comment from admin)
admin_id //nullable (null if comment from user)
news_id
は、今私は、単一の管理者からのすべての投稿と投稿のためのすべてのコメントを取得せずに、これらの記事から数えるすべてのコメントを取得したい、ONLY COUNT:
は、私は次のような3つのテーブルを持っています n + 1のクエリの問題を避けるために熱心に読み込んでください。ここで
私たちは、次のような積極的なロードで使用する関係を作るべきだと思う:
//admin model
public function commentsCountRelation()
{
return $this->hasManyThrough(Comment::class, News::class, 'admin_id', 'news_id')
->selectRaw('news_id, count(*) as count')
->groupBy('news_id');
}
--Look news_idがAdmins
テーブルにない、ので、ここで私はhasManyThrough
関係を使用していました。
は、その後、私は、属性をしなければならないように、easylyのカウントにアクセスするには:
public function getCommentsCountAttribute()
{
return $this->commentsCountRelation->first()->count ?? 0;
}
そして、それが好きアクセス:
$admin = Admin::with('commentsCountRelation')->findOrFail($id);
$admin->commentsCount;
をしかし、それは常にnull
を返し、それはなぜですか?すべてのヘルプは非常にhasManyThrough
を使用する必要がない
:その後、あなたがそれにアクセスすることができます
$admin->posts->withCount('comments')->get();
:
ちょうどいくつかの関係や
withCount
メソッドを使用します。アプリには複数の管理者がおり、すべてに投稿があります。特定の管理者からのすべての投稿とすべてのコメントが必要です。 質問には私はテーブルの構造を説明しました。私は 'Admin'モデルで作業している間にコメントカウントが必要です どうすればいいですか? 'hasManyThrough'を使わないでこれを行うのですか?私はすべての投稿をカウントしたくないだけですが、この管理者の投稿のみを取得したいのです。 '$ admin-> post-> commentCount' コード例を書いたり、簡単に説明していただければ幸いです – APu関係:' Admin'は 'hasMany'に' Post'は 'hasMany'と' Comment'を持っています – APu
あなたのメソッドが熱心な読み込みを使用していないと思いますか? また、あなたは '$ admin-> post-> comments-> count()'の代わりに、あなたの言及方法を使って効率的なメリットを教えてください。 – APu