Php Zend Framework 2 TableGateway MAX查询
几天以来,我在使用tablegateway和zf2函数进行mysql查询时遇到了问题 我想获取列Php Zend Framework 2 TableGateway MAX查询,php,mysql,zend-framework,zend-framework2,Php,Mysql,Zend Framework,Zend Framework2,几天以来,我在使用tablegateway和zf2函数进行mysql查询时遇到了问题 我想获取列'reservation\u spot'的最大值,其中'reservation\u datetime'=&reservation\u datetime 查询应该是这样的 SELECT MAX(`reservation_spot`) FROM `reservation` WHERE `reservation_datetime`='2015-09-30 8:00' 我试过很多方法来解决那个问题,但我做不
'reservation\u spot'
的最大值,其中'reservation\u datetime'=&reservation\u datetime
查询应该是这样的
SELECT MAX(`reservation_spot`) FROM `reservation` WHERE `reservation_datetime`='2015-09-30 8:00'
我试过很多方法来解决那个问题,但我做不到
这是我的职责
public function getMaxValueWhereDate($reservation_datetime)
{
$select = $this->tableGateway->getSql()->select();
$select->columns(array(
'maxValue' => new Expression('MAX(reservation_spot)')
));
$select->where(array('reservation_datetime' => $reservation_datetime));
$rowset = $this->tableGateway->selectWith($select);
$row = $rowset->current();
if (!$row) {
throw new \Exception("Could not retrieve max value");
}
return $row;
}
再加上这个
$reservation->reservation_spot = $this->getMaxValueWhereDate($reservation_datetime);
$reservation->reservation_spot++;
在此之后,当我运行表单时,会出现错误:
语句无法执行(42000-1064-您在
您的SQL语法;请检查与您的SQL语法对应的手册
“55”、“41”、“1”、0附近要使用的正确语法的服务器版本,
“2015-09-08 16:23:27”)(第1行)
来自我的函数的查询是
SELECT MAX(reservation_spot) AS `maxValue` FROM `reservation` WHERE `reservation_date` = '2015-09-30 08:00'
@更新已解决,编辑为
public function getMaxValueWhereDate($reservation_datetime)
{
$sql = $this->tableGateway->getSql();
$select = $sql->select();
$select->columns(array(
'maxValue' => new Expression('MAX(reservation_spot)')
));
$select->where(array('reservation_datetime' => $reservation_datetime));
return $this->tableGateway->selectWith($select);
}
及
返回的行结果是模型的实例,而不是所需的值 在第一个示例中,更改此行:
返回$row->maxValue;
您还必须在模型中声明maxValue字段,否则它将不会被映射
如果模型中不需要此字段,另一种可能性是使用现有字段:
$select->columns(array(
'reservation_spot' => new Expression('MAX(reservation_spot)')
));
然后:
return $row->reservation_spot;
查询看起来像什么?您可以使用tableGateway->getSqlStringFromSqlObject($select)打印sql查询ID。您可以正确地“使用Zend\Db\sql\Expression”;在您的存储库中,我的函数的查询是select MAX(保留点)作为
maxValue
fromreservation
其中reservation\u date
='2015-09-30 08:00'我不确定,错误消息与您提供的代码示例链接。返回$row['maxValue']应该解决,而不是强制转换它。
return $row->reservation_spot;
$date = '2015-09-30 8:00';
$select = $this->getSql()->select()
->columns(array('Reservation ' => new \Zend\Db\Sql\Expression('MAX(reservation_spot)')))
->where("reservation_datetime ='$date'");
$resultSet = $this->selectWith($select);
$row = $resultSet->current();