Использование картографов данных в Zend Framework - PullRequest
0 голосов
/ 18 ноября 2010

Например:

Мне нужно получить набор мужских идентификаторов пользователя, имён и фамилий, но больше ничего.

Итак, у меня в UserMapper есть функция fetchAllMaleUsers (), которая возвращает набор пользовательских сущностей.

т.е.:

public function fetchAllMaleUsers() {
        $select = $this->getDbTable()
                        ->select()
                        ->from($this->getDbTable(),
                                array('ID', 'FirstName', 'LastName'))
                        ->where('Gender = ?', 'M');

        $resultSet = $this->getDbTable()->fetchAll($select);

        $users = array();
        foreach ($resultSet as $row) {
            $user = new Application_Model_User();
            $user->setId($row->ID)
                 ->setFirstName($row->FirstName)
                 ->setLastName($row->LastName);
            $users[] = $user;
        }

        return $users;
    }
  1. Принадлежит ли эта функцияслой отображения?
  2. Можно ли устанавливать только Id, Firstname и LastName для каждого объекта User?

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

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

0 голосов
/ 19 ноября 2010

Наряду с ответом Fge я считаю, что $ resultSet уже должен возвращать значения типа Application_Model_User. Если нет, вам может потребоваться установить $ _rowClass в Application_Model_DbTable_User.

...