在Zend Framework中使用数据映射器

时间:2010-11-18 20:21:14

标签: zend-framework datamapper fetch

例如:

我需要检索一组男性用户的ID,名字和姓氏,但没有别的。

所以我在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?

2 个答案:

答案 0 :(得分:1)

1)对于mapper / Gateway来说非常好,或者你称之为 2)你可以做但我非常鼓励这一点。为什么?稍后在您的应用程序中,您无法确定从哪里获得模型。因此,每当您不确定是否设置了某个值时,您必须检查模型中是否设置了值,或者您需要一些自动加载的内容来查找缺失值(这比丢失的内容更糟糕)。另一个原因是您不能将该函数重用于可能需要用户模型的其他属性的其他部分。 afaik的最后一个原因是,模型在任何时候都代表完整的实体,而不是它的一部分。并且没有真正的理由不加载所有字段(除了对其他实体的引用之外,为什么应该自动加载)。

答案 1 :(得分:0)

除了Fge的回复,我相信$ resultSet应该已经返回Application_Model_User类型的值。如果没有,您可能需要在Application_Model_DbTable_User中设置$ _rowClass。