为了账号安全,请及时绑定邮箱和手机立即绑定

Yii2模型排除相关记录

Yii2模型排除相关记录

PHP
德玛西亚99 2022-05-27 10:24:27
我有两个相关的表,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 表中的帖子”。那么这是否使用外部连接查询,或者是否有一条我找不到的语句在一行中执行此操作?
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

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


$posts = Post::find()

    ->andFilterWhere(['not in', 

        'post.id',

        HiddenPost::find()

           ->select(['hidden_post.post_id'])

    ->all();

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


查看完整回答
反对 回复 2022-05-27
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

使用 yii2 拥有的函数而不是在模型中添加查询(例如在模型中使用选择查询)可能是一种很好的做法。


相反,您可以在 yii2 中使用 ORM 函数,这些函数已经由 gii 内部函数完成,以使 u=您的工作更轻松。


添加 * @property YourModel $hidden_post 并在此模型中添加您的 post_id,例如 ( * @property integer $post_id) 以创建关系。


public function getHiddenPosts($hidden_post) {

    return $this->find()->joinWith('hidden_post')

        ->where(['hidden_post' => $hidden_post])

        ->all();

}


查看完整回答
反对 回复 2022-05-27
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

可以使用内部连接检索帖子项目


$res = Post::find()

->select('post.*')

->innerJoin('hdn_post', '`post`.`id` = `hdn_post`.`post_id`')

->all();


查看完整回答
反对 回复 2022-05-27
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号