我仍然试图以“分层”的方式查看第二个tableadapter集合的记录集。
在我的控制器操作中,我向视图传递了第二个参数:
return new ViewModel([
'projects' => $this->projectTable->fetchAll(),
'dcls' => $this->table->fetchAll()
]);在我看来,我认为我可以像第一批一样,抓住第二批藏品:
foreach ($projects as $project) :
?>
<tr>
<td><?= $project['Projectname']?></td>
<td><?= $project['ProjectShortcut']?></td>
<td><?= $project['ProjectCiNumber']?></td>
<td><?= $project['Unitname']?></td>
<td><?= $project['UnitShortcut']?></td>
<td><?= $project['UnitCiNumber']?></td>
<td>
<a href="<?= $this->url('import', ['action' => 'edit', 'id' => $import->DCLID]) ?>">Edit</a>
<a href="<?= $this->url('import', ['action' => 'delete', 'id' => $import->DCLID]) ?>">Delete</a>
</td>
<?php foreach ($dcls->getImportunit($project['UnitID']) as $dcl) : ?>
<td><?= $dcl['Importdate']?></td>
<?php endforeach; ?>
<?php endforeach; ?>但这不管用,我有一些理解上的问题。
如果我尝试$dcls->getImportunit($project['UnitID']) as $dcl
然后我得到一个错误
调用未定义的方法Zend\Db\ResultSet\ResultSet::getImportunit()
该方法被放在我的模型中,并且是公开的。
如果我打电话来只是想试试:<?php foreach ($dcls as $dcl) :
`<td><?= $dcl['Importdate']?></td> <?php endforeach; ?>` I get an error 不能使用导入\Model\Import类型的对象作为数组
有趣的是,我使用了和项目一样的语法吗?
如果我用它作为对象:
<?php foreach ($dcls as $dcl) :
<td><?= $dcl->Importdate?></td>
<?php endforeach; ?>我犯了个错误
此结果仅为前向结果集,不支持在向前移动后调用回退()。
这个有意义,因为我只是尝试了不同的可能性,以获得一个线索,如果我的dcl记录是可用的,在我的看法。
所以我有两个问题。为什么我不能像我在项目中做的那样,把列作为一个错误来分级。为什么我不能用我的方法?似乎集合dcls没有正确传递。
因此,除了一些小的理解问题,我的目标应该是滚动第二个集合(dcl),同时使用第一个集合(项目)的参数。
EDIT1:听从工作人员的建议
首先,我的新代码:
控制器/索引操作
$dcls = $this->table->fetchAll();
// make an array for dcl
$secondCollection = array($dcls);
foreach ($dcls as $dcl) {
// if this is a resultset pass into view as you need
$importUnits = $dcl->getImportunit($project['UnitID']);
$secondCollection['importdate'] = $dcl->importdate;
$secondCollection['DCL_Path'] = $dcl->DCL_Path;
}
// pass $secondCollection via model
return new ViewModel([
'projects' => $this->projectTable->fetchAll(),
'dcls' => $secondCollection,
]);问:这是如何工作的,因为我如何理解视图获取每个项目的记录集,如果我在这里试图获得与UnitID相关的UnitID,它如何在视图中工作?根据我的理解,如果我调用路由,对视图的传递只执行一次,不是吗?还是我在这件事上错了?
在这个片段中的这个$importUnits = $dcl->getImportunit($project['UnitID']);可能没有效果?
发布于 2017-06-30 08:31:58
调用未定义的方法Zend\Db\ResultSet\ResultSet::getImportunit()
这是您要得到的,因为您没有以一种不应该调用的方式调用该方法。
不能使用导入\Model\Import类型的对象作为数组
除非隐式定义为被调用为正在调用的类中的数组,否则不能将对象调用为数组。
此结果仅为前向结果集,不支持在向前移动后调用
rewind()。
这是因为,对于返回的结果集,通常不能再循环一次,如果不将内部指针倒带到开头,则此结果集使用SPL Iterator。
因此,要解决此问题,可以在返回结果集之前使用buffer()方法。
public function fetchAll()
{
$resultSet = $this->tableGateway->select();
$resultSet->buffer(); // This is the point here
return $resultSet ;
}缓冲是Zend\Db\ResultSet\ResultSet的一个特性,您可以使用它来包装驱动程序结果。
编辑:
无论与模型相关的是什么,您都必须在模型中这样做。当您遇到结果集的循环问题时,您可以在模型的帮助下完成这个任务。这意味着从控制器方法中的结果集创建一个数组,然后将它传递给视图。
例如,您在视图中这样做是为了满足您的需求。
foreach ($projects as $project) :
// here you are looping for project
foreach ($dcls as $dcl) :
// Here you want to loop for dcl
endforeach;
endforeach;但由于上述原因,不能在另一个循环中使用循环。
'projects' => $this->projectTable->fetchAll(),
'dcls' => $this->table->fetchAll() 如您所知,$projects和$dcls返回结果集。这就是为什么我告诉您从控制器方法中的那些结果集生成数组的原因。
您已经知道如何从$projects和$dcls中显示什么。因此,从结果集生成数组如下所示
$secondCollection = array();
foreach ($dcls as $dcl) {
$secondCollection['importdate'] = $dcl->importdate;
$secondCollection['DCL_Path'] = $dcl->DCL_Path;
}如果你需要的话,为别人做同样的技术。
现在,如果需要按特定ID或名称设置任何结果,那么应该使用模型的方法帮助来处理控制器方法中的内容。例如
$projects = $this->projectTable->getProjectByUnitId($unitId);现在您知道了$projects也是一个结果集,所以您可以像上面那样使它成为一个数组。
然后在视图中传递来自不同结果集的所有数组.
return new ViewModel([
'array_name1' => $array_name1,
'array_name_2' => $array_name_2,
]);希望这能帮到你!
https://stackoverflow.com/questions/44841279
复制相似问题