ZF的Datamapper DB模式:管理关系数据库

时间:2010-11-27 17:31:15

标签: php design-patterns zend-framework zend-db-table database-design

我正在使用Zend Framework创建一个应用程序,我想使用数据映射器设计模式来管理我的数据库。我不明白的是如何将模式与关系数据库一起使用。

假设我有一个包含列id,标题,文本和作者的帖子的表。我可以使用以下类来管理它:

class Application_Model_DbTable_Posts extends Zend_Db_Table_Abstract
{
    $_name = 'posts';
}

class Application_Model_PostMapper
{
    public function setDbTable($dbTable);
    public function getDbTable();
    public function save($post);
    public function find($id);
    public function fetchAll();
}

class Application_Model_Post
{
    protected $_id;
    protected $_title;
    protected $_text;
    protected $_author;

    public function __set($name, $value);
    public function __get($name);
}

现在,假设我想创建一对多的关系 - 例如评论 - 我该怎么做?和多对多的关系? - 或者那会像一对多那样完成吗?

如果可能,请在您的答案中提供代码示例,以帮助我理解。

1 个答案:

答案 0 :(得分:2)

一般来说,如果您的Application_Model_Post模型有一个Application_Model_Comments集合,您可以为评论设置适当的Db_Table和Mapper,并以某种方式扩展Post模型,以便为特定帖子获取评论。

您可能决定将CommentMapper注入Post模型:

class Application_Model_Post {
    protected $_commentMapper;

    function __construct($commentMapper){
        $this->_commentMapper = $commentMapper;
    }

    function getComments(){
        return $this->_commentMapper->findByPostId($this->getId());
    }
}

请注意,Post模型仍然不知道持久层。有关加载注释的所有详细信息都会在CommentMapper中抽象出来。

相关问题