我一直在尝试很多不同的东西,但我似乎无法找到JOIN的方法......将实体的属性作为集合。 说我有用户和联系人。由于原因,我想进行如下查询:
SELECT c FROM Bundle:Contact c
LEFT JOIN Bundle:User u WITH c.user = u
WHERE c IN u.contacts
我知道这个查询似乎没有任何意义,但我正在处理的实际查询是:)
所以Doctrine不接受该查询,因为它在IN之后需要SELECT ... FROM。 如何进行查询以便检查c是否属于集合u.contacts?如何根据实体属性中的select来限制选择?
答案 0 :(得分:0)
好吧,说实话,我不知道你想做什么。我会给你两个例子,一个可能是你需要的,或者至少可以让你知道该怎么做。
第一个问题;你的WITH和IN条件对我来说并没有多大意义。如果您只想加入一些用户,您应该这样做:
//ContactRepository
public function findMeSomething()
{
$subquery = "SELECT s1.id FROM Bundle:User s1 WHERE ... some condition" ;
return $this->createQueryBuilder("c")
->leftJoin("c.Users", "u", "WITH", "u.id IN ($subquery)"
...
这将加入与其用户的联系;并非所有用户都会受到$ subquery的限制。
第二:如果你想限制抓取联系人(主要选择),那么
$subquery = "SELECT s1.id FROM Bundle:Contact s1 WHERE ... some condition" ;
->where("c.id IN ($subquery)"
答案 1 :(得分:0)
尝试成员:
SELECT c FROM Bundle:Contact c
LEFT JOIN Bundle:User u WITH c.user = u
WHERE c MEMBER OF u.contacts