it-roy-ru.com

получить счет в таблице отношений в yii2 Activerecord

У меня есть две таблицы для поста и пользователя. Я хочу показать количество сообщений пользователя в gridview списка пользователей. В yii 1 я использую это в модели, чтобы определить отношение для этой цели:

'postCount' => array(self::STAT, 'Post', 'author',
            'condition' => 'status = ' . Post::ACTIVE),

...
User:find...().with('postCount').....

Но я не знаю, как реализовать это в Yii2, чтобы получить количество сообщений в User: find (): with ('...') для отображения в gridview.
Кто-нибудь пробовал это в yii2?

5
Araz Jafaripur

Вот пример того, что я сделал, и, кажется, до сих пор работает нормально. Он был использован для подсчета комментариев к сообщению. Я просто использовал стандартное количество активных записей и создал связь с оператором where, используя $ this-> id и первичный ключ записи, для которой получен счет. 

public function getComment_count()
{
    return Comment::find()->where(['post' => $this->id])->count();
}

Просто проходя мимо ...

8
brdflp

Вы можете попробовать код ниже:

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']);
}
3
Ali MasudianPour

Ну, тем не менее, я думаю, что для тех, кого это касается, если вы ПРОСТО ХОТИТЕ подсчитать выборку, а не данные, лучше использовать это вместо imho

$count = (new \yii\db\Query())
->select('count(*)')
->from('table')
->where(['condition'=>'value'])
->scalar();

echo $count;
2
Bruno de Oliveira