MVC Сложный запрос и использование модели - PullRequest
1 голос
/ 09 марта 2012

у меня 3 таблицы.

  • пользователей,
  • кампаний,
  • ссылки.

У них есть отношения один ко многим . У пользователя много кампаний. Кампания имеет много ссылок.

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

Этот запрос включает 3 таблицы. У меня уже есть 3 модельных класса для каждой из этих таблиц. Теперь мой вопрос в какой модели я должен поставить этот запрос? Должен ли он идти в пользовательской модели (как я ее называю top10users ? Или есть другой способ получить эту информацию, используя уже существующие 3 модели. Я хочу знать, что наиболее подходит с точки зрения MVC.

Дополнительная информация

Я использую в .

Запрос:

SELECT u.id, 
       u.name, 
       SUM(l.num_visited) total_num_visited 
FROM   users u 
       JOIN campaigns c 
         ON ( u.id = c.user_id ) 
       JOIN links l 
         ON ( c.id = l.campaign_id ) 
GROUP  BY u.id 
ORDER  BY total_num_visited DESC 
LIMIT  10;

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

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

Тогда, если есть определенная бизнес-логика, связанная с топ-пользователями, которая не относится к стандартному классу пользователей, вы можете сохранить ее отдельно и очистить. Вы всегда можете предоставить вспомогательные / фабричные методы из TopUser, которые возвращают экземпляры User, Campaign или Link, если вам нужно выполнить детализацию.

1 голос
/ 09 марта 2012

Я бы сказал, пойти для topusers ().Не существует «правильного» ответа на этот вопрос, не в техническом контексте.Но это должно быть ясно, чтобы понять.Так что, если вы хотите получить лучших пользователей, почему вы бы поместили такой метод в одну из других моделей, чем пользователи?Подумайте о новом члене команды, который получает ваш код: где бы вы искали лучших пользователей, если не в модели пользователей в первую очередь?

...