首页 > 解决方案 > Yii2模型排除相关记录

问题描述

我有两个相关的表,posts并且hidden_posts,在哪里postsid对应hidden_postspost_id.

在我的posts模型中,如果应该隐藏帖子,我有这种关系来返回记录:

  public function getHiddenPosts()
    {
        return $this->hasOne(HiddenPost::className(), ['post_id' => 'id']);
    }

现在我需要返回所有未隐藏的帖子。所以我正在寻找这个伪代码的等价物:

return $this->hasNone(HiddenPost::className(), ['post_id' => 'id'])->all();

也就是说,“显示所有不在 hidden_​​posts 表中的帖子”。

那么这是否使用外部连接查询,或者是否有一条我找不到的语句在一行中执行此操作?

标签: phpmysqlyii2

解决方案


你可以这样做。获取隐藏表中未列出的所有帖子:

$posts = Post::find()
    ->andFilterWhere(['not in', 
        'post.id',
        HiddenPost::find()
           ->select(['hidden_post.post_id'])
    ->all();

无论如何,最好从原始 SQL 语句开始。编写满足您的结果的语句并将其传输到 ActiveRecord 查询。


推荐阅读