我使用join -
运行下一个查询Map.map
并在一个查询中选择所有产品尺寸。没有$this->createQueryBuilder('products')->select('products')
->leftJoin('products.sizes', 'sizes')->addselect('sizes');
我有超过50个查询。但总的应用时间少于第一个例子。我在第一个例子中做错了什么?
答案 0 :(得分:0)
如果您执行 addSelect ,则Doctrine将只执行一个查询,该查询将获取您需要的所有信息并在一个对象中进行水合。如果那时你做了
foreach($products as $product){
foreach($product->getSizes() as $size(){
echo $size->getStuff();
}
}
Doctrine不会做任何额外的查询。 如果省略 addSelect ,则Doctrine将针对您的每种产品大小执行查询。现在,您必须挑战您的应用程序,看看什么是最佳解决方案。 在某些解决方案中,一个大的查询/水合作用比十几个小查询执行得更好。每个应用程序都会有不同的反应。