2013-07-27 2 views
1

Я совершенно новой для ORM и всего немного опыт работы с MVC, поэтому мне было интересно следующее:Где разместить логику поиска с ORM-моделями и MVC?

У меня есть модели ORM User, Organization .. Когда я хочу найти всех пользователей в organization 1 Я следующее :

$users = Model_User::query()->where('organisation_id', 1); 

Если я просто положить, что прямо в контроллер, или где-то еще?

+0

Ну это зависит, это что-то ваша модель должна (быть в состоянии) знать все время (модель)? Или он отображает определенную информацию на определенной странице (Контроллер)? Или, может быть, даже в качестве виджета на каждой странице (я все равно буду использовать контроллер), HMVC будет лучше использовать для такого виджета. – AmazingDreams

+0

В этом случае он используется как вывод на страницу, хотя, поскольку я использовал CodeIgniter некоторое время, там я бы сделал функцию в модели, которая выводит объект-массив. – Sander

+0

Я бы пошел за Контроллером. Это не сложный запрос, поэтому, если вам когда-нибудь понадобится его где-нибудь еще, что такое потеря? – AmazingDreams

ответ

3

В идеале вы должны иметь еще один слой между ОРМОМ (или слоем данных или сохранением или хранилищем) и контроллером. Вы можете позвонить этим службам/AppServices/BLL.

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

ORM:

Users GetUsers() //for all users 

Услуги:

Users GetUsersForOrganization(int orgId) //call orm method and filter for organization id 
+2

К сожалению, эти рамки не имеют слоя модели.Только коллекция активных записей, которую они любят притворяться, - это «модели». –

0

Когда я работаю с MVC, у меня всегда есть Data Object Data1 и Mapper Data1Mapper. Свойство ValueObject предназначено для хранения данных, а mapper содержит такие методы, как find, save, delete, fetchAll и т. Д.

В контроллере я создаю экземпляр картографа и получаю доступ к нужному методу.

Пример:

class DataMapper { 
    public function __construct() { 
     //fetch TableDateGateway 
    } 

    public function find() { 
     //find by identifier 
    } 

    public function save($data) { 
     //insert or update 
    } 
} 

class Data { 
    protected $_property; 

    public function getProperty() { 
     return $this->_property; 
    } 

    public function setProperty($value) { 
     $this->_property = $value; 
    } 
} 

class Controller { 
    public function indexAction() { 
     $id = 1; 
     $mapper = new DataMapper(); 
     $data = $mapper->find($id); //--> returns if found a Data-Object 
    } 
} 
+0

-1: это не является преобразователем данных, ваш «контроллер» был тесно связан с указанным классом «DataMapper», а картографы не сохраняют/не извлекают объекты значений. –

+0

@ tereško Ну, это точно так же, как это делается в Zend Framework 1.x. Значит, они не используют действительный MVC? И контроллер передает данные только модели. Что не так с этим? –

+0

@TobiasKun erm, ZF1 вообще не имеет DataMappers или ORM. Они имеют TableDataGateways, которые возвращают набор записей. Они не возвращают Объекты ценности или Сущности. – Gordon

Смежные вопросы