В Symfony2 я должен использовать Entity или пользовательский репозиторий - PullRequest
1 голос
/ 11 сентября 2011

Я создаю новое веб-приложение и мне нужна помощь в разработке планов.

У меня есть объекты "store", и у каждого есть несколько объектов "message". Я хочу показать страницу магазина, которая показывает сообщения этого магазина. Используя Doctrine, я сопоставил OneToMany, используя http://symfony.com/doc/current/book/doctrine.html

Однако я хочу показывать сообщения в обратном хронологическом порядке. Поэтому я добавил:

* @ORM\OrderBy({"whenCreated" = "DESC"})

Тем не менее я вызываю объект "store", затем вызываю

$store->getMessages();

Теперь я хочу показать сообщения, которые были «проверены». На данный момент я не уверен, как это сделать с помощью @ORM, поэтому я подумал, что мне нужен собственный слой Repository.

У меня двоякий вопрос:

  1. Во-первых, можно Я делаю это, используя платформу Entity @ORM?
  2. И, во-вторых, какой правильный способ обернуть этот запрос к базе данных?

Я знаю, что в конечном итоге хочу SQL SELECT * FROM message WHERE verified=1 AND store_id=? ORDER BY myTime DESC, но как сделать это "способом Symfony2"?

1 Ответ

2 голосов
/ 11 сентября 2011

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

Ваш вопрос интересный, потому что на первый взгляд я бы также подумал об использовании $store->getMessages().Но из-за ваших пользовательских критериев, я думаю, вам лучше использовать собственный класс репозитория для сообщений.Тогда у вас могут быть такие методы, как

$messageRepo->getForStoreOrderedBy($storeId, $orderBy)

и

$messageRepo->getForStoreWhereVerified($storeId).

Теперь вы можете сделать это из сущности Store с помощью методовкак $store->getMessagesWhereVerified(), но я думаю, что вы загрязните сущность магазина, особенно если вам нужно все больше и больше этих пользовательских методов.Я думаю, что, храня их в хранилище сообщений, вы разделяете свои проблемы более чистым способом.Кроме того, с хранилищем сообщений вы можете сохранить запрос, указав , а не , для которого нужно сначала получить ваш объект Store, поскольку вам нужно будет только запросить таблицу сообщений и использовать ее store_id в предложении WHERE.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...