Php 无法使用表网关使用join zend framework 2获取记录

Php 无法使用表网关使用join zend framework 2获取记录,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,这是我的函数,当我调用它时,出现以下错误: 由于此对象是使用构造函数中的表和/或架构创建的,因此它是只读的 public function getImpressionLeft($AvailableCampaigns){ $result = $this->tableGateway->select(function(Select $select) use ($AvailableCampaigns){ $select->from(array('a'=>'

这是我的函数,当我调用它时,出现以下错误:

由于此对象是使用构造函数中的表和/或架构创建的,因此它是只读的

public function getImpressionLeft($AvailableCampaigns){
    $result = $this->tableGateway->select(function(Select $select) use ($AvailableCampaigns){
        $select->from(array('a'=>'CampaignSettings'));
        $select->columns(array(
            'a.CampaignID',
            'MaxImpression'=>new \Zend\Db\Sql\Expression('a.MaxImpression - b.TotalImpression'),
            'MaxClick'=> new \Zend\Db\Sql\Expression('a.MaxClick - b.TotalClicks'), 
            ))->join(array('b'=>'ImpressionCount'),'a.CampaignID = b.CampaignID',Select::JOIN_LEFT)
            ->where(new \Zend\Db\Sql\Predicate\In('a.CampaignID',$AvailableCampaigns));
    });
    return $result->getDataSource();
}

您关闭闭包太快了,我很惊讶您没有得到解析错误。你可能永远不会死

public function getImpressionLeft($AvailableCampaigns){
        $result = $this->tableGateway->select(function(Select $select) use ($AvailableCampaigns){
            $select->from(array('a'=>'CampaignSettings'));
            $select->columns(array(
                'a.CampaignID',
                'MaxImpression'=>new \Zend\Db\Sql\Expression('a.MaxImpression - b.TotalImpression'),
                'MaxClick'=> new \Zend\Db\Sql\Expression('a.MaxClick - b.TotalClicks'), 
                ))->join(array('b'=>'ImpressionCount','a.CampaignID = b.CampaignID',Select::JOIN_LEFT))
                ->where(new \Zend\Db\Sql\Predicate\In('a.CampaignID',$AvailableCampaigns));
        });
        return $result->getDataSource();
    }

另一点是$result是一个ResultSet对象,因此您可以在foreach中迭代它来读取每一行,您可以尝试返回
$result
,而不是
$result->getDataSource()

谢谢你的回复,很抱歉我发错了代码。我编辑过it@SadiqGaur我也刚刚编辑了我的,因为TableGateway::select()的结果是一个resultset,没有得到任何东西没有resultset,只有errro出现“因为这个对象是用构造函数中的表和/或架构创建的,它是只读的”。实际上,还有一篇文章可能会对您有所帮助。基本网关似乎绑定到一个表,本文将向您展示一个示例,以从AbstractTableGateway中示例一个新网关