Шаблон БД Datamapper с ZF: Управление реляционной базой данных - PullRequest
2 голосов
/ 27 ноября 2010

Я создаю приложение с использованием Zend Framework и хочу использовать шаблон проектирования отображения данных для управления моей базой данных.Что я не понимаю, так это как использовать шаблон с реляционной базой данных.

Предположим, у меня есть таблица, содержащая записи с идентификаторами столбцов, заголовком, текстом и автором.Я мог бы использовать следующие классы для управления этим:

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 Ответ

2 голосов
/ 28 ноября 2010

Вообще говоря, если ваши модели 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.

...