У меня есть три объекта - Календарь, Событие и Происшествие. Календарь имеет много событий, и у каждого события есть много случаев. Теперь в 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');
}