我正在使用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);
}
现在,假设我想创建一对多的关系 - 例如评论 - 我该怎么做?和多对多的关系? - 或者那会像一对多那样完成吗?
如果可能,请在您的答案中提供代码示例,以帮助我理解。
答案 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中抽象出来。