Yii2如何添加子句> 0到关系属性

时间:2018-05-10 09:13:59

标签: php yii2

我有两个模型:用户,帖子。用户有很多帖子。

<app-inputs 
(event)="getDataFromChild($event)"
(eventTwo)="getDataFromChildTwo($event)"
(event_N)="getDataFromChild_N($event)"></app-inputs>

我只需要有帖子的用户(帖子&gt; 0)。 我该如何撰写查询?

public function getPosts()
{
    return $this->hasMany(Posts::className(), ['user_id' => 'id']);
}

上面的代码不起作用。

3 个答案:

答案 0 :(得分:1)

尝试此查询:

Users:find()
->where('id IN (select user_id FROM posts GROUP BY user_id)')
->all();

答案 1 :(得分:1)

要让至少有一个帖子的用户需要使用INNER JOIN

Users::find()
    ->innerJoinWith('posts', false)
    ->groupBy('users.id')
    ->all();

子查询应该更有效。

如果您想根据帖子数量进行过滤,则应添加带有计数条件的HAVING子句:

Users::find()
    ->innerJoinWith('posts', false)
    ->groupBy('users.id')
    ->having(new \yii\db\Expression('COUNT(*) > :posts_nr', ['posts_nr' => 2]))
    ->all();

但是这样的查询在大型数据库上可能非常繁重 - 您应该考虑在用户表中添加包含帖子数量的附加列。

答案 2 :(得分:-1)

$orders = Users::find()->with('posts')->all();

内部联接应删除帖子为空的用户