Php 条令对一对多关系进行了许多查询
我有一个Symfony2应用程序,里面的条令是ORM。在我的应用程序中,我有两个具有一对多关系的实体。一个实体是Php 条令对一对多关系进行了许多查询,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我有一个Symfony2应用程序,里面的条令是ORM。在我的应用程序中,我有两个具有一对多关系的实体。一个实体是User,多个实体是Item。他们的关系如下: 用户: 项目: 问题是,当我试图获取用户及其项目的列表时,条令为每个用户创建单独的查询以获取其项目 查询本身非常简单: $entities = $em->getRepository('AppUserBundle:User')->findBy([], [], 30); 是否可以使用条令在一个查询中自动获取用户的所有相关
User
,多个实体是Item
。他们的关系如下:
用户:
项目:
问题是,当我试图获取用户
及其项目
的列表时,条令为每个用户创建单独的查询以获取其项目
查询本身非常简单:
$entities = $em->getRepository('AppUserBundle:User')->findBy([], [], 30);
是否可以使用条令在一个查询中自动获取用户的所有相关项
我使用的是SF 2.7.6和条令库,版本如下:
doctrine/annotations v1.2.7 Docblock Annotations Parser
doctrine/cache v1.5.1 Caching library offering an ob...
doctrine/collections v1.3.0 Collections Abstraction library
doctrine/common v2.5.1 Common Library for Doctrine pr...
doctrine/dbal v2.5.2 Database Abstraction Layer
doctrine/doctrine-bundle 1.6.0 Symfony DoctrineBundle
doctrine/doctrine-cache-bundle 1.2.1 Symfony Bundle for Doctrine Cache
doctrine/doctrine-migrations-bundle 1.1.1 Symfony DoctrineMigrationsBundle
doctrine/inflector v1.0.1 Common String Manipulations wi...
doctrine/instantiator 1.0.5 A small, lightweight utility t...
doctrine/lexer v1.0.1 Base library for a lexer that ...
doctrine/migrations v1.1.0 Database Schema migrations usi...
doctrine/orm v2.5.1 Object-Relational-Mapper for PHP
您可以创建一个执行连接的数据库,以避免额外的查询。可以用自己的实现替换findBy
方法,但我更喜欢创建更具描述性的方法
尽管Symfony文档中的示例使用了,但是如果您愿意,可以使用。我认为设置“快速获取”不是一个好主意 像这样的方法应该可以很好地工作:
$users = $this->getEntityManager()
->createQueryBuilder()->select('u, i') // key is to select both entities
->from('YourBundle:User', 'u')
->join('u.item', 'i')
->getQuery()->getResult();
确保已清除缓存,并且显示的映射文件是实际使用的映射文件。使您不会混淆yaml和注释。你发布的内容应该有用。我刚刚检查了所有这些,仍然没有运气。只是为了笑,试着从你的查询中删除30。当涉及连接时,限制和偏移总是有点困难。我使用的是查询生成器,本问题中的查询仅用于简化,结果是相同的。如果使用查询生成器,则发布查询。您需要同时选择用户和项目。有很大的不同。我已经设法用你的答案得到了相关的记录。从技术上讲,它是可行的,但会给数据带来很大的开销。假设我与用户实体有多个一对多关系,并且希望一次返回10000条记录,每个用户有10个项目和10个帐户。如果我使用JOIN方法,它将返回10000*10*10条记录。我更希望条令能够进行3次单独的查询来获取这些数据。
doctrine/annotations v1.2.7 Docblock Annotations Parser
doctrine/cache v1.5.1 Caching library offering an ob...
doctrine/collections v1.3.0 Collections Abstraction library
doctrine/common v2.5.1 Common Library for Doctrine pr...
doctrine/dbal v2.5.2 Database Abstraction Layer
doctrine/doctrine-bundle 1.6.0 Symfony DoctrineBundle
doctrine/doctrine-cache-bundle 1.2.1 Symfony Bundle for Doctrine Cache
doctrine/doctrine-migrations-bundle 1.1.1 Symfony DoctrineMigrationsBundle
doctrine/inflector v1.0.1 Common String Manipulations wi...
doctrine/instantiator 1.0.5 A small, lightweight utility t...
doctrine/lexer v1.0.1 Base library for a lexer that ...
doctrine/migrations v1.1.0 Database Schema migrations usi...
doctrine/orm v2.5.1 Object-Relational-Mapper for PHP
$users = $this->getEntityManager()
->createQueryBuilder()->select('u, i') // key is to select both entities
->from('YourBundle:User', 'u')
->join('u.item', 'i')
->getQuery()->getResult();