Ответ 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 по своей природе является предшественником, который был расширен множеством функций для достойного ООП. Массивы по-прежнему являются наиболее эффективными структурами данных, которые вы можете использовать в PHP. Объекты имеют наибольшую ценность, когда они используются для выполнения сложной бизнес-логики. Это пустая трата ресурсов, когда данные обернуты в дорогостоящие структуры объектов, когда у вас нет выгоды от этого
При использовании HYDRATE_ARRAY
:
Можете ли вы представить себе какую-либо выгоду от наличия объектов в представлении вместо массивов? Вы не собираетесь выполнять бизнес-логику в представлении, не так ли? Один параметр может сэкономить вам много ненужной обработки:
$blogPosts = $q->execute(array(1), Doctrine_Core::HYDRATE_ARRAY);