2014-11-12 3 views
3

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

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

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

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

+0

См. Https://github.com/yiisoft/yii2/issues/2179#issuecomment-91845257. – PowerGamer

ответ

3

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

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']); 
} 
+0

Я хочу, чтобы информация пользователя с почтовым индексом, именем пользователя, адресом электронной почты, сообщением –

+0

@ArazJafaripur well, измените 'count()' на 'one()' или 'all()' и получим свой счет –

+0

Тип данных для возврата должен быть ActiveQuery, поскольку данные должны отображаться в gridview. -> все ошибки. –

6

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

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

Просто проходя его вдоль ...

+0

Спасибо, он сделал магию. – moplin

2

Ну еще я думаю, что для тех, кто это может касаться, если вы просто хотите подсчитывать выбрать и не данные будет лучше использовать это вместо IMHO :

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

echo $count;