我有两个模型:用户,帖子。用户有很多帖子。
<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']);
}
上面的代码不起作用。
答案 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();
内部联接应删除帖子为空的用户