Доктрина частичных объектов ... это для производительности? - PullRequest
1 голос
/ 24 июля 2010

я узнал, что в доктрине я могу вернуть частичные объекты. когда я просто делаю print_r() возвращенного набора результатов, они, похоже, все еще содержат определения для полей, за исключением того, что когда я их выводю, я получаю n-е. так что я думаю, что определения есть, а значения нет. это для производительности? например. в SQL я должен SELECT field1, field2 вместо SELECT *?

Ответы [ 3 ]

0 голосов
/ 25 июля 2010

Насколько я могу судить, возможность выбирать только частичные объекты, как вы говорите, для производительности. Однако, если ваша таблица не очень большая или не содержит столбцы с данными большого размера, я сомневаюсь, что эффект будет очень большим.

Doctrine может лениво загружать значения в столбцах, которые не выбираются при первом создании объекта. Это может создать проблемы с производительностью, поскольку Doctrine будет выполнять больше запросов для получения отсутствующих данных, поэтому старайтесь всегда проверять, какие данные вы используете.

0 голосов
/ 19 августа 2012

Частичные запросы очень полезны, если вам нужны результаты, которые не включают различные данные, такие как пароли и тому подобное.

Я использую его для своего REST API, тогда как я не хочу возвращать такие данные, как пароль объекта User.

Примером может быть:

 SELECT .... JOIN  ... partial user.{user_id, email} .... 

А затем вернуть массив с Query::HYDRATE_ARRAY. Очевидно, это не имело бы особого смысла, если бы вы не увлажняли свой результат.

Это полезно, потому что вы не хотите получать хешированный пароль пользователя, чтобы все могли его видеть (то есть в REST API, где вы отправляете данные в клиентские приложения, такие как управляемые магистрали, или даже приложения iPhone / Android). 1011 *

0 голосов
/ 25 июля 2010

Я не совсем понимаю ваш вопрос, но в DQL вы можете сделать SELECT *, поскольку ORM всегда создаст из него запрос SELECT field1, field2,....

При использовании обычного SQL вам следует избегать SELECT *, так как это снизит производительность.

...