Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带有ZF的Datamapper DB模式:管理关系数据库_Php_Design Patterns_Zend Framework_Zend Db Table_Database Design - Fatal编程技术网

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

Php 带有ZF的Datamapper DB模式:管理关系数据库,php,design-patterns,zend-framework,zend-db-table,database-design,Php,Design Patterns,Zend Framework,Zend Db Table,Database Design,我正在使用Zend Framework创建一个应用程序,我想使用数据映射器设计模式来管理我的数据库。我不明白的是如何在关系数据库中使用该模式 假设我有一个包含posts的表,其中包含id、title、text和author列。我可以使用以下类来管理它: class Application_Model_DbTable_Posts extends Zend_Db_Table_Abstract { $_name = 'posts'; } class Application_Model_Pos

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

假设我有一个包含posts的表,其中包含id、title、text和author列。我可以使用以下类来管理它:

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);
}
现在,假设我想创建一个一对多的关系——例如,注释——我该怎么做?还有多对多的关系还是会像一对多那样


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

一般来说,如果您的应用程序\u模型\u发布模型有一组应用程序\u模型\u注释,您将设置适当的Db\u表和注释映射器,并以某种方式扩展您的发布模型,允许获取特定帖子的评论

您可能会决定将CommentMapper注入到您的Post模型中:

class Application_Model_Post {
    protected $_commentMapper;

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

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

请注意,您的Post模型仍然对持久性层一无所知。所有关于加载注释的详细信息都被抽象到您的CommentMapper中。

您注意到,手工编写数据映射程序并切换到ORM(如Doctrine)是一项非常繁琐的工作,它通过配置为您完成这项工作。我想自己来做。但是我该怎么做呢?查看如何在
应用程序\u Model\u PostMapper
中设置
保存
方法?大概这也需要了解
注释映射器
——您是否只使用传入的
$post
中的注释映射器?