我正在使用ZendFramework 2和TableGateway,这对于普通的select语句来说很好。但我似乎无法找到如何使用ZendFramework 2选择获得最大列。 我的选择应该看起来像
SELECT MAX( `publication_nr` ) AS maxPubNr FROM `publications`
我的代码如下:
use Zend\Db\TableGateway\TableGateway;
class PublicationsTable
{
protected $tableGateway;
...
public function getMaxPubicationNr()
{
$rowset = $this->tableGateway->select(array('maxPubNr' => new Expression('MAX(publication_nr)')));
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not retrieve max Publication nr");
}
return $row;
}
答案 0 :(得分:6)
如果查看TableGateway,您会注意到Select方法的参数实际上是传递给Query的Where部分,这使得查询不正确。
您需要直接修改Select Object,因为TableGateway不会为您提供任何代理方法。
您可以尝试这样的事情:
public function getMaxPubicationNr()
{
$select = $this->tableGateway->getSql()->select();
$select->columns(array(
'maxPubNr' => new Expression('MAX(publication_nr)')
));
// If you need to add any where caluses you would need to do it here
//$select->where(array());
$rowset = $this->tableGateway->selectWith($select);
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not retrieve max Publication nr");
}
return $row;
}
我没有对它进行测试,但这应该只是让你到那里:)
你可能会遇到另一个问题,那可能是由于TableGateway尝试从结果中构建一个对象,但是你没有带回一整行来构建一个对象,你只是带来了回到一个专栏。
我只是添加使用Db / Select对象来执行此操作,而不是理会GateWay,我不认为它应该像这样使用。