У меня есть две таблицы для поста и пользователя. Я хочу показать количество сообщений пользователя в gridview списка пользователей. В yii 1 я использую это в модели, чтобы определить отношение для этой цели:
'postCount' => array(self::STAT, 'Post', 'author',
'condition' => 'status = ' . Post::ACTIVE),
...
User:find...().with('postCount').....
Но я не знаю, как реализовать это в Yii2, чтобы получить количество сообщений в User: find (): with (‘…’) для отображения в gridview.
Кто-нибудь пробовал это в yii2?
Вот пример того, что я сделал, и, кажется, до сих пор работает нормально. Он был использован для подсчета комментариев к сообщению. Я просто использовал стандартное количество активных записей и создал связь с оператором where, используя $ this-> id и первичный ключ записи, для которой получен счет.
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']);
}
Ну, тем не менее, я думаю, что для тех, кого это касается, если вы ПРОСТО ХОТИТЕ подсчитать выборку, а не данные, лучше использовать это вместо imho:
$count = (new \yii\db\Query())
->select('count(*)')
->from('table')
->where(['condition'=>'value'])
->scalar();
echo $count;