学说2...最佳补水模式?

2022-08-31 01:07:35

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

因此,我想知道使用该模式是否比/ / 更快或“更好”。由于我正在重用一些我想使用的旧代码,但前提是它不会减慢应用程序的速度。Query::HYDRATE_OBJECTQuery::HYDRATE_ARRAYQuery::HYDRATE_SCALARQuery::HYDRATE_SINGLE_SCALARHYDRATE_ARRAY


答案 1

我的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);

答案 2

推荐