2016-09-17 3 views
2

У меня есть простой индекс действие:ZF2 Как добавить модель класса подпунктов к основной модели

$reminders = $this->reminderTable->fetchAll(); 

foreach ($reminders as $reminder) { 
    $reminder->receivers = $this->reminderTable->getReceivers($reminder->id); 
} 

return new ViewModel(array(
    'reminders' => $reminders 
)); 

ГЮТ приемники (подпункты основной таблицы) выглядит следующим образом:

public function getReceivers($id) 
{ 
    $adapter = $this->tableGateway->getAdapter(); 
    $receiversTable = new TableGateway('ga_reminders_receivers', $adapter); 

    $resultSet = $receiversTable->select(function (Select $select) use ($id) { 

     $select->join('ga_users', 'ga_reminders_receivers.receiver_uid = ga_users.uid', array('uid', 'firstname', 'lastname', 'email', 'telephone'), 'left'); 
     $select->where('ga_reminders_receivers.rid = ' . $id); 

    }); 

    return $resultSet; 
} 

Это дает мне ошибку фантазии

Этот результат является только вперед результирующего набора, вызов перемотка назад() после продвижения вперед является не су pported.

Итак, я думаю, мой вопрос таков: когда я делаю выборку из набора результатов, он снимается в классе модели благодаря exchangearray(). Но как я предполагаю заполнить свойство модели списком подмоделей?

В этом случае модель Reminder:

class Reminder { // from the reminders table 

public function exchangeArray($data) 
{ 
    $this->id = (!empty($data['rid'])) ? str_pad($data['rid'], 5, '0', STR_PAD_LEFT) : null; 
    $this->label = (!empty($data['label'])) ? $data['label'] : null; 
    // etc. 
    $this->receivers = array(
     new Receiver(1), 
     new Receiver(2), 
     // list of objects from the reminders_receivers table 
    ) 
} 

Второй вопрос: нужен ли отдельный getReceivers() метод? Возможно, он может быть интегрирован в 1 запрос. Пока используются классы моделей Reminder и Receiver, все в порядке.

ответ

0

В этом случае вы должны использовать буфер.

public function getReceivers($id) 
{ 
    $adapter = $this->tableGateway->getAdapter(); 
    $receiversTable = new TableGateway('ga_reminders_receivers', $adapter); 

    $resultSet = $receiversTable->select(function (Select $select) use ($id) { 

     $select->join('ga_users', 'ga_reminders_receivers.receiver_uid = ga_users.uid', array('uid', 'firstname', 'lastname', 'email', 'telephone'), 'left'); 
     $select->where('ga_reminders_receivers.rid = ' . $id); 

    }); 


    $resultSet->buffer(); 
    return $resultSet; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^