2016-09-17 71 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个查询中。只要使用型号ReminderReceiver,就可以。

回答

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; 
}