Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令对一对多关系进行了许多查询_Php_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

Php 条令对一对多关系进行了许多查询

Php 条令对一对多关系进行了许多查询,php,symfony,doctrine-orm,doctrine,Php,Symfony,Doctrine Orm,Doctrine,我有一个Symfony2应用程序,里面的条令是ORM。在我的应用程序中,我有两个具有一对多关系的实体。一个实体是User,多个实体是Item。他们的关系如下: 用户: 项目: 问题是,当我试图获取用户及其项目的列表时,条令为每个用户创建单独的查询以获取其项目 查询本身非常简单: $entities = $em->getRepository('AppUserBundle:User')->findBy([], [], 30); 是否可以使用条令在一个查询中自动获取用户的所有相关

我有一个Symfony2应用程序,里面的条令是ORM。在我的应用程序中,我有两个具有一对多关系的实体。一个实体是
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();