开发者

Using data mappers in Zend Framework

开发者 https://www.devze.com 2023-01-26 00:30 出处:网络
For example: I need to retrieve a set of male User\'s IDs, First Names, and Last Names, but nothing else.

For example:

I need to retrieve a set of male User's IDs, First Names, and Last Names, but nothing else.

So I have a function in UserMapper called fetchAllMaleUsers() that returns a set of User entities.

i.e:

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

        $resultSet = $this->g开发者_StackOverflowetDbTable()->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. Does this function belong in the mapper layer?
  2. Is it ok to only set the Id, Firstname, and LastName of each User entity?


1) Perfectly fine for the mapper/Gateway or however you call it.
2) You can do but i highly disencourage this. Why? Later on in your application you can't tell from where you did get the model. So you'd have to check if a value is set in your model each time you're not sure if it is set or you'd need some autoloading stuff for missing values (which is as worse as missing stuff). Another reason is that you can't reuse the function for other porposes where you might need other properties of the user model. Last reason afaik is, that a model represents the complete entity at any time, not parts of it. And there's no real reason why not to load all fields (beside references to other entities why should be autoloaded anyways).


Along with Fge's reply I believe that $resultSet should already be returning values of type Application_Model_User. If not, you may need to set $_rowClass in Application_Model_DbTable_User.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号