Php 如何在ORM中查询多对多?

Php 如何在ORM中查询多对多?,php,mysql,symfony,doctrine,Php,Mysql,Symfony,Doctrine,我想问你关于如何在symfony中查询这种多对多场景的想法 在我的实体篮中,我有一个可链接到用户实体的表 实体:篮子 /** * @var User $users * * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", cascade={"persist","remove"}) * @ORM\JoinTable(name="basket_users", * joinColumn

我想问你关于如何在symfony中查询这种多对多场景的想法

在我的实体篮中,我有一个可链接到用户实体的表

实体:篮子

/**
     * @var User $users
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\User", cascade={"persist","remove"})
     * @ORM\JoinTable(name="basket_users",
     *      joinColumns={@ORM\JoinColumn(name="basket_id", referencedColumnName="id", onDelete="CASCADE")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")}
     *      )
     */
    protected $users;
我成功地将数据添加到我的表中,并显示如下 表格:篮子用户

------------------------
basket_id  |  user_id
------------------------
2          |   15
2          |   10
2          |    3
------------------------ 
我有这个代码来显示表:篮子数据列表

 $sample = $em->getRepository('AppBundle:Basket')->findByUserId($userId));
这是findByUserId()的存储库

此代码已成功显示表格:篮的列表。这是一个我不知道是否可以查询的场景。我的用户id是3。上面的代码将显示篮子列表。 当我使用dump()获得symfony结果时

array:1 [▼
  0 => Basket {#1090 ▼
    #id: 2
    #title: "king"
    #price: 200
    #title: "Test"
    #users: PersistentCollection {#1088 ▶}
    #scheduleAt: DateTime {#1068 ▶}
  }
]
我如何在查询中包含显示用户id 10和用户id 15的内容?在我的PersisticCollection中的“用户”下。它仅显示“我的收藏”中的用户3

更新

User {#813 ▼
    #id: 3
    #createdAt: DateTime {#817 ▶}
    #updatedAt: DateTime {#816 ▶}
    #profile: null
    #username: "ace"
    #email: "sample@gmail.com"
    #plainPassword: null
    #lastLogin: DateTime {#818 ▶}
    #confirmationToken: null
    #passwordRequestedAt: null
    #groups: null
    #roles: array:2 [▶]
新更新

User {#813 ▼
    #id: 3
    #createdAt: DateTime {#817 ▶}
    #updatedAt: DateTime {#816 ▶}
    #profile: null
    #username: "ace"
    #email: "sample@gmail.com"
    #plainPassword: null
    #lastLogin: DateTime {#818 ▶}
    #confirmationToken: null
    #passwordRequestedAt: null
    #groups: null
    #roles: array:2 [▶]
到目前为止,我已经有了在中使用这个
$qb->expr()->的想法,但现在的问题是它只显示用户id 3。请参阅我的代码和注释

 public function listUsers($id){

        //user_id = 3
        $result = $this->findByUserId($id);
        $idList = [];
        if($result){
            foreach ($result as $opentok){
               $idList[] = $opentok->getId();
            }
        }

        // basket_id = 2
        // idList = [2]
        $qb = $this->createQueryBuilder('er');
        $qb->where($qb->expr()->in('er.id', $idList));

        dump($qb->getQuery()->getResult());
        exit;
}
我使用前面的代码findByUserId($id)获取basketid2的篮子id。当我得到这个列表时,我把它放在一个数组
$idList=[]
存储id,然后添加到我的查询中

 $qb->where($qb->expr()->in('er.id', $idList));
因为那个查询就像选择这个篮子表一样

Select * from AppBundle:Basket where id = 2

这将显示篮框,但当我查看用户时。它只显示用户id 3。

您问的是条令问题,不是Symfony。对不起。我将更改问题。如果你
打印
转储
$result[0]['users']
,你会看到什么?@chrisam我会更新我的帖子。在用户下。那将是显示器。它只显示用户3您确实有条件按用户id进行筛选:
->其中('u.id=:userId')
您问的是条令问题,而不是Symfony.sorry。我将更改问题。如果你
打印
转储
$result[0]['users']
,你会看到什么?@chrisam我会更新我的帖子。在用户下。那将是显示器。它只显示用户3您确实有条件按用户id进行筛选:
->其中('u.id=:userId')