首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过状态标志获取关系实体的原理

通过状态标志获取关系实体的原理
EN

Stack Overflow用户
提问于 2020-08-10 21:34:55
回答 1查看 76关注 0票数 0

我有3个表usersgroupsgroup_users (保存组和用户之间的关系)

group_users表包括以下列

代码语言:javascript
复制
-- (is_active 0: not active, 1: active)

| id | user_id | group_id | is_active |
| 1  |     1   |    1     |    1      |
| 2  |     1   |    2     |    0      |

Group的entity中,我有一个关系列,如下所示,它使用group_users表中的关系获取组用户

代码语言:javascript
复制
   /*
    * @ORM\Entity()
    * @ORM\Table(name="groups")
    */
   class Group{
     ...
    /**
     * @var Collection|GroupUser[]
     * @ORM\OneToMany(targetEntity="App\Group\Domain\Entity\GroupUser")
     */
    private $group_users;

Group的entity中,我想获取组用户,但只获取活动的用户。在正常情况下,上面的关系获取所有相关实体。

如果我需要举一个例子,根据上面group_users表中的记录,当我调用像$this->group_users这样的变量时,我希望看到只列出了第一条记录

代码语言:javascript
复制
| id | user_id | group_id | is_active |
| 1  |     1   |    1     |    1      |

不是这个

代码语言:javascript
复制
| id | user_id | group_id | is_active |
| 2  |     1   |    2     |    0      |

你知道解决这个问题的最好方法是什么吗,谢谢。

注意:我不想物理删除任何记录。

EN

回答 1

Stack Overflow用户

发布于 2020-08-21 13:35:56

您可以在Group实体中定义一个新的getter,它将根据您的条件过滤出相关的组用户

代码语言:javascript
复制
use Doctrine\Common\Collections\Criteria;


class Group{

    //...

    protected getActiveGroupUsers() { 
            $criteria = \Doctrine\Common\Collections\Criteria::create()
                        ->where(\Doctrine\Common\Collections\Criteria::expr()->eq("is_active", 1));
         return $this->group_users->matching($criteria);
    }

}

当你查询一个群时,你可以得到相关的活跃群用户为

代码语言:javascript
复制
$group = $em->getRepository("...\Group")->find($id);
$group->getActiveGroupUsers();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63341304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档