php - Yii2模型排除相关记录
问题描述
我有两个相关的表,posts
并且hidden_posts
,在哪里posts
。id
对应hidden_posts
。post_id
.
在我的posts
模型中,如果应该隐藏帖子,我有这种关系来返回记录:
public function getHiddenPosts()
{
return $this->hasOne(HiddenPost::className(), ['post_id' => 'id']);
}
现在我需要返回所有未隐藏的帖子。所以我正在寻找这个伪代码的等价物:
return $this->hasNone(HiddenPost::className(), ['post_id' => 'id'])->all();
也就是说,“显示所有不在 hidden_posts 表中的帖子”。
那么这是否使用外部连接查询,或者是否有一条我找不到的语句在一行中执行此操作?
解决方案
你可以这样做。获取隐藏表中未列出的所有帖子:
$posts = Post::find()
->andFilterWhere(['not in',
'post.id',
HiddenPost::find()
->select(['hidden_post.post_id'])
->all();
无论如何,最好从原始 SQL 语句开始。编写满足您的结果的语句并将其传输到 ActiveRecord 查询。
推荐阅读
- python - 如何防止我的机器人获得角色
- angular - Angular mat-tab:仅加载初始选定选项卡的内容
- c# - 如何使用'LibGit2sharp'获取有关每个提交的git分支信息
- mongodb - 如何在 macbook 上运行 mongo 导出?
- c# - C# - Unity - 参数传递问题
- angular - npm 版本只是主要的(没有次要/补丁部分)
- javascript - 更改选择选项时如何获取对象值 - Angular9
- winapi - 在 Windows 上与用户客户端进行自定义软件驱动程序通信
- php - Symfony 5.2 Forms 中两个相关的 EntityType 字段
- python - 如何比较列表中列表中的 2 个值 - Python