投稿用とユーザー用の2つのテーブルがあります。ユーザーリストのグリッドビューにユーザーの投稿数を表示したい。 In yii 1これをモデルで使用して、この目的の関係を定義します。
'postCount' => array(self::STAT, 'Post', 'author',
'condition' => 'status = ' . Post::ACTIVE),
...
User:find...().with('postCount').....
しかし、これをYii2に実装して、ユーザー:find():with( '...')の投稿数を取得してグリッドビューに表示する方法がわかりません。
yii2でこれを試す人はいますか?
これが私がしたことの例であり、これまでのところうまく機能しているようです。投稿へのコメント数を取得するために使用されました。私は単に標準のアクティブレコードカウントを使用し、$ this-> idとカウントを取得するエントリの主キーを使用してwhereステートメントとの関係を作成しました。
public function getComment_count()
{
return Comment::find()->where(['post' => $this->id])->count();
}
ただそれを渡すだけ...
以下のコードを試すことができます。
User::find()->joinWith('posts',true,'RIGHT JOIN')->where(['user.id'=>'posts.id'])->count();
または、ユーザー数を指定する場合:
//user id 2 for example
User::find()->joinWith('posts',true,'RIGHT JOIN')->where(['user.id'=>'posts.id','user.id'=>2])->count();
posts
は、以下のようにUser
モデルで定義された関係であることに注意してください。
public function getPosts()
{
return $this->hasMany(Post::className(), ['user_id' => 'id']);
}
それでも、関係する可能性のある人にとっては、データではなく選択したカウントだけが必要な場合は、代わりにこれを使用する方がよいと思います。
$count = (new \yii\db\Query())
->select('count(*)')
->from('table')
->where(['condition'=>'value'])
->scalar();
echo $count;