Как связать referenceMaps с DataMapper в Zend? - PullRequest
1 голос
/ 04 января 2012

У меня есть три объекта - Календарь, Событие и Происшествие. Календарь имеет много событий, и у каждого события есть много случаев. Теперь в CalendarMapper я хочу создать объект календаря, который автоматически заполняет массив событий внутри, и события каждого события также автоматически заполняются.

Я читал о getParentRow и пробовал что-то подобное в Application_Model_CalendarMapper:

    public function fetchAllWithEvents($id)
    {
      $resultSet = $this->getDbTable()->fetchAll();
      $entries   = array();
      foreach ($resultSet as $row) {
                $entry = new Application_Model_Calendar();
                $events = $row->findParentRow('Application_Model_DbTable_Events');
    ...

Однако вышеприведенная строка, похоже, не проходит через EventMapper (по крайней мере, не fetch / fetchAll), поэтому она просто получает массив, содержащий события.

Итак, как мне вставить данные о происшествии в каждое событие здесь? Является ли правильный способ вызова EventsMapper напрямую (а EventsMapper использует OccurrenceMapper для заполнения событий)?

Означает ли это, что referenceMap не очень полезен в этом контексте?

$entry->setEvents($events); 

Я хочу сделать это, но $ events должен быть массивом объектов Event, которых в настоящее время нет.

Классы Dbtable

Календарь:

class Application_Model_DbTable_Calendars extends Zend_Db_Table_Abstract
{
    protected $_name = 'phpc_calendars';
    protected $primary_key = 'cid';
    protected $_referenceMap = array (
        'Events'=> array (
            'columns'=>'cid',
            'refTableClass'=>'Application_Model_DbTable_Events',
            'refColumns'=>'cid'
        )
    );
}

События

class Application_Model_DbTable_Events extends Zend_Db_Table_Abstract
{
    protected $_name = 'phpc_events';

    protected $primary_key = 'eid';
    protected $_dependentTables = array ('Calenars');
    protected $_referenceMap = array (
        'occurrences'=> array (
            'columns'=>'eid',
            'refTableClass'=>'Application_Model_DbTable_occurrences',
            'refColumns'=>'eid'
        )
    );
}

Появления:

class occurrences extends Zend_Db_Table_Abstract
{
    protected $_name = 'phpc_occurrences';

    protected $primary_key = 'ocid';
    protected $_dependentTables = array ('Events');
}

1 Ответ

0 голосов
/ 11 февраля 2012

Не удалось найти удовлетворительный способ сделать это. Итак, я реализовал это сам, не используя referenceMaps

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...