我是该学说的新手,现在我想做以下事情。
表“ user_friend”:
id | user_id | friend_user_id
该表包含联系人列表的条目。
现在我想获得条目的结果,例如:
SELECT * FROM user_friend a
LEFT JOIN user_friend b
ON (b.user_id = 10 AND b.friend_user_id = a.user_id)
WHERE b IS NULL
该查询将在那里从联系人列表中获取另一侧朋友未确认的条目(WHERE b IS NULL,他尚未将“ me”添加到他的联系人列表中)。我希望你理解我在寻找什么。
我不确定WHERE b IS NULL是否正确,或者如何在一个查询中检查是否已经有另一个条目(表中已确认的朋友),对此的正确方法是什么?我的想法就像是左联接,您可以在上面看到。
其次,我不知道如何使用Symfony2中的学说来做到这一点。现在我知道EntityManager和-> findBy方法。这个方法返回对象,很好。
我尝试了$ em-> createQueryBuilder()一点,但是在那儿的leftJoin无法达到我的目标。如果是左联接,是否必须使用createQueryBuilder还是可以通过EntityManager进行?让我们也问:哪种方法更好?第三,我不知道如何从createQueryBuilder获取实体对象。-> getQuery()-> getResult()。我需要水合结果吗?
对此的一些示例代码将非常不错!
谢谢。晚上好。
在SQL你会在WHERE语句来定义列的名称,以便代替b IS NULL
它需要b.user_id IS NULL
SELECT * FROM user_friend a
LEFT JOIN user_friend b
ON (b.user_id = 10 AND b.friend_user_id = a.user_id)
WHERE b.user_id IS NULL
使用以下方法编写相同查询的另一种方法 NOT EXISTS
SELECT * FROM user_friend a
WHERE NOT EXISTS (
SELECT * FROM user_friend b
WHERE b.user_id = 10
AND b.friend_user_id = a.user_id
)
使用DQL中的相同查询 NOT EXISTS
$qb->select("a")
->from("MyBundle\Entity\UserFriend a")
->where('NOT EXISTS (
SELECT b
FROM MyBundle\Entity\UserFriend b
WHERE b.user_id = :user_id
AND b.friend_user_id = a.user_id
)')
->setParameter('user_id', 10);
在您的DQL中,请确保使用实体字段名称,该名称不一定与数据库列名称相同(即,用户ID可能存储在名为“ user_id”的列中,但实体的字段名称可能只是“ id”或“ userId”)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句