Doctrine2 ...最好的保湿模式?

Dan*_*iel 12 php doctrine-orm

我正在设计一个房间预订系统,它有九个实体,它们都是相互关联的.在这个特定的例子中,我从entry具有25个属性的实体中检索10-30行.每个条目都有一个room有10个属性.我需要所有的条目信息以及entry->room->identry->room->name.但是room当我使用时,似乎教条正在加载整个Query::HYDRATE_ARRAY.它似乎Query::HYDRATE_OBJECT更容易延迟加载.

所以,我想知道使用Query::HYDRATE_OBJECT模式是否比Query::HYDRATE_ARRAY/ Query::HYDRATE_SCALAR/ 更快或更好Query::HYDRATE_SINGLE_SCALAR.因为我正在重用一些我希望使用的旧代码,HYDRATE_ARRAY但前提是它不会减慢应用程序的速度.

Mik*_*e B 15

我的2美分:

HYDRATE_OBJECT当您计划在对象中使用大量业务逻辑时,最适合.特别是如果你正在进行大量的数据操作.它也可能是最慢的(取决于具体情况).

HYDRATE_ARRAY 通常仅在您需要结果和1度关系数据时保留,并且它仅用于打印/查看目的.

HYDRATE_NONE我只选择一个非常小的数据子集(比如一个或两个字段而不是整行)时使用的另一个.这与原始查询结果非常相似.

这也可能是有意义的http://www.doctrine-project.org/2010/03/17/doctrine-performance-revisited.html

这是来自1.2文档,但我认为水化技巧适用于2.0 http://doctrine.readthedocs.org/en/latest/en/manual/improving-performance.html

属于此类别的另一个重要规则是:仅在您真正需要时才获取对象.Doctrine能够获取"数组图"而不是对象图.乍一看,这可能听起来很奇怪,因为为什么首先使用对象关系映射器呢?花点时间考虑一下.PHP本质上是一种先前的语言,它已被增强,具有很多适合OOP的功能.数组仍然是您可以在PHP中使用的最有效的数据结构.当对象用于完成复杂的业务逻辑时,它们具有最大的价值.当数据被包含在昂贵的对象结构中时,如果没有这样的好处,那就浪费了资源

使用时HYDRATE_ARRAY:

您能想到在视图中使用对象而不是数组的任何好处吗?您不会在视图中执行业务逻辑,是吗?一个参数可以为您节省大量不必要的处理:

$blogPosts = $q->execute(array(1), Doctrine_Core::HYDRATE_ARRAY);
Run Code Online (Sandbox Code Playgroud)