ZF2如何模型类的子项添加到主模型
问题描述:
我有一个简单的索引操作: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
,就可以。
答
在这种情况下,您必须使用缓冲区。
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;
}