在Zend Framework中使用数据映射器

例如:

我需要检索一组男性用户的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;
    }
  • 这个函数是否属于映射器层?
  • 只设置每个用户实体的Id,Firstname和LastName是否可以?

  • 1)完美的映射器/网关,或者你称它为好。
    2)你可以做但我非常不鼓励这个。 为什么? 稍后在你的应用程序中,你无法分辨你从哪里获得模型。 所以你必须检查模型中的值是否设置在每次你不确定它是否被设置,或者你需要一些自动加载的东西来弥补缺失值(这与缺少东西一样糟糕)。 另一个原因是,您不能在其他可能需要用户模型的其他属性的位置重用该功能。 afaik的最后一个原因是,模型在任何时候代表完整的实体,而不是其中的一部分。 并没有真正的理由为什么不加载所有的领域(除了引用其他实体,为什么要自动加载)。


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

    链接地址: http://www.djcxy.com/p/56239.html

    上一篇: Using data mappers in Zend Framework

    下一篇: PHP how to implement the Data Mapper pattern in MVC