Репозитории всегда должны возвращать объекты? - PullRequest
0 голосов
/ 09 августа 2011

Этот вопрос задал мне сегодня, мои репозитории всегда должны возвращать полные объекты? Они не могут вернуть частичные данные (например, в массиве)?

Например, у меня есть метод getUserFriends(User $user) внутри моего репозитория Friends, в этом методе я выполняю следующий DQL:

$dql = 'SELECT userFriend FROM Entities\User\Friend f JOIN f.friend userFriend WHERE f.user = ?0';

Но так я возвращаю сущности пользователей, содержащие все свойства, сгенерированный SQL - это SELECT всех полей из таблицы User. Но, скажем, мне просто нужен идентификатор и имя пользователя, друзья, было бы более интересно (и быстро) получить только эти значения?

$dql = 'SELECT userFriend.id, userFriend.name FROM Entities\User\Friend f JOIN f.friend userFriend WHERE f.user = ?0';

Эти методы выполняются в моем классе обслуживания.

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Вы можете использовать частичное ключевое слово в своем DQL: http://www.doctrine -project.org / docs / orm / 2.0 / en / reference / частичное-objects.html? Highlight = частичное

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

1 голос
/ 09 августа 2011

С точки зрения базы данных, производительность не будет сильно зависеть от количества полей, если только количество возвращаемых строк не очень велико (вероятно, миллионы строк): самая сложная часть для db - сделать соединения и создайте набор результатов из таблиц.

С точки зрения php, это зависит от множества факторов, таких как сложность и количество созданных объектов.

Я бы взял проблему по-другому: я бы профилировал и стресс-тестировал мой код, чтобы увидеть, является ли производительность проблемой, и решил реорганизовать его только в случае необходимости (переход от доктрины к ручной модели - время будет ли стоить выигрыш в производительности?)

РЕДАКТИРОВАТЬ: и ответить на ваш первоначальный вопрос: выборка полных объектов приведет к упрощению кэширования, если это необходимо, и лучшей инкапсуляции данных. Я бы оставил их, пока они не станут большой проблемой производительности.

...