Php 如何在ORM中查询多对多?
我想问你关于如何在symfony中查询这种多对多场景的想法 在我的实体篮中,我有一个可链接到用户实体的表 实体:篮子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
/**
* @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')