教义和Symfony最佳实践

问题描述 投票:0回答:2

我想知道在ORM中2种方法之间进行优化的最佳选择。

  • 我用对象的条件创建一个QueryBuilder并获得一个尊重我的查询条件的对象数组
  • 并使用getDoctrine()->findAll()获取所有对象,然后在php中检查我对对象应用的条件

我不知道这在酒店预订和某些客房的空房情况下尤其如此。 这种搜索包括许多具有复杂查询的不同实体。 仅仅考虑querybuilder会让我头疼...但是我不确定这是在php中填充所有实体然后应用我的函数的最佳方法。

sql symfony doctrine-orm
2个回答
1
投票

通常,您应该通过使用查询构建器构建的查询来获取所需的对象。 您不应该通过->findAll()来获取所有实体,然后使用php进行过滤,因为这可能会占用大量资源-假设您的数据库中有1,000,000个条目?

如果您正在查看酒店预订和房间供应情况-您将编写一个查询,该查询仅返回具有房间供应情况的对象-而不是使用php检查所有对象。

我写了一篇有关该学说的最佳实践的博客文章,可在此处找到-http: //www.uvd.co.uk/blog/some-doctrine-2-best-practices/


0
投票

我认为创建一个QueryBuilder (或简单地编写一个DQL查询)来获得结果总是更好。

当通过getDoctrine()->findAll()调用获取所有对象时,将创建一个PHP对象,并为每个结果设置他的值。 然后,您的PHP脚本(肯定比数据库慢)将仅保留有趣的对象,您将拥有很多garbadge

当您使用QueryBuilder ,数据库将优化查询的处理并仅返回有趣的对象。 您避免了很多对象实例化,并且不需要使用PHP过滤结果。

© www.soinside.com 2019 - 2024. All rights reserved.