我想知道在ORM中2种方法之间进行优化的最佳选择。
getDoctrine()->findAll()
获取所有对象,然后在php中检查我对对象应用的条件 我不知道这在酒店预订和某些客房的空房情况下尤其如此。 这种搜索包括许多具有复杂查询的不同实体。 仅仅考虑querybuilder会让我头疼...但是我不确定这是在php中填充所有实体然后应用我的函数的最佳方法。
通常,您应该通过使用查询构建器构建的查询来获取所需的对象。 您不应该通过->findAll()
来获取所有实体,然后使用php进行过滤,因为这可能会占用大量资源-假设您的数据库中有1,000,000个条目?
如果您正在查看酒店预订和房间供应情况-您将编写一个查询,该查询仅返回具有房间供应情况的对象-而不是使用php检查所有对象。
我写了一篇有关该学说的最佳实践的博客文章,可在此处找到-http: //www.uvd.co.uk/blog/some-doctrine-2-best-practices/
我认为创建一个QueryBuilder
(或简单地编写一个DQL查询)来获得结果总是更好。
当通过getDoctrine()->findAll()
调用获取所有对象时,将创建一个PHP对象,并为每个结果设置他的值。 然后,您的PHP脚本(肯定比数据库慢)将仅保留有趣的对象,您将拥有很多garbadge 。
当您使用QueryBuilder
,数据库将优化查询的处理并仅返回有趣的对象。 您避免了很多对象实例化,并且不需要使用PHP过滤结果。