symfony 有没有一种方法可以让Doctrine通过DQL查询条件只对集合中的关联实体的子集进行水合?

kmynzznz  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(124)

考虑StoreLocation实体之间的一对多实体关系(一个Store有许多Location s)。接下来考虑一个Store实体有3个Location s:

Store (id = 1)
   locations
      (id = 1, opened = true)
      (id = 2, opened = true)
      (id = 3, opened = false)

在DQL中是否有一种方法可以通过id来获取Store,但要以locations集合只包含具有条件opened = trueLocation实体的方式来获取?
目前,我可以通过id获取Store实体,然后过滤掉我不想要的位置,但我想知道是否有一种方法可以使用Doctrine DQL查询从不从DB中获取不想要的位置,并使用部分水合的位置列表获取Store实体。谢谢。

raogr8fs

raogr8fs1#

一个简单的方法是获取所有有打开位置的商店。我没有检查这是否有语法错误:

$query = $em->createQuery("SELECT s FROM Store s JOIN s.location l WHERE l.open = '1');
$stores = $query->getResult();

然后你可以为每个store调用getLocations()来获取打开的Location-s的集合。我假设你在Store类中有getLocations()方法。
你也可以将关系定义为一对多双向,然后你可以运行DQL查询,类似于这样:

$query = $em->createQuery("SELECT l FROM Location l JOIN l.stores s WHERE s.id=[your specific Store ID] AND l.open='1');

这应该会产生Location对象的集合。
更多示例:https://www.doctrine-project.org/projects/doctrine-orm/en/2.16/reference/dql-doctrine-query-language.html#joins

相关问题