Есть ли хитрость в языке запросов Doctrine для доступа к объектным методам? - PullRequest
1 голос
/ 19 марта 2011

У меня есть несколько методов в моем классе сущностей (вычисление временных интервалов между созданием и крайним сроком и т. Д.), Которые я хотел бы заказать в моем DQL.Я пытался использовать __get для доступа к методу в качестве свойства, но, похоже, DQL использует get_object_properties или аналогичный, поэтому это не работает.

Пример запроса, который не работал: SELECT t FROM Entity\Task t ORDER BY t.TTL ASC, где TTLдоступ осуществляется через __get(), который возвращает getTTL().

Есть ли уловка, которую я могу использовать для доступа к ним таким образом, или мне лучше просто отсортировать набор результатов самостоятельно?

1 Ответ

3 голосов
/ 21 марта 2011

Не возможно. Чтобы упорядочить по вычисленным значениям, предварительно вычислите значения и сохраните их в поле. Предварительное вычисление значений даст дополнительное преимущество гораздо более эффективного и отзывчивого поиска.

Имейте в виду, что DQL отображается на SQL. Чтобы выполнить то, что вы просите, DQL должен будет извлечь каждую соответствующую запись из всей таблицы, объединить их в объекты сущности, запустить ваши функции и затем отсортировать в памяти (или повторно выполнить запрос). Это хорошая идея, но она просто не сработает.

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

...