2015-09-08 141 views
2

因爲幾天我有一個使用tablegateway和zf2函數的mysql查詢問題。Zend Framework 2 TableGateway MAX查詢

我想獲得'reservation_spot'列的最大值,其中'reservation_datetime' = &reservation_datetime 查詢768,16是這樣

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++; 

當我運行我的形式在此之後,我得到的錯誤:

Statement could not be executed (42000 - 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' '55', '41', '1', 0, '2015-09-08 16:23:27')' at line 1)

查詢從我的功能是

SELECT MAX(reservation_spot) AS `maxValue` FROM `reservation` WHERE `reservation_date` = '2015-09-30 08:00' 

@UPDATE解決,編輯以

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); 
} 

$reservation->reservation_spot = (int)$this->getMaxValueWhereDate($reservation_datetime); 
+0

什麼呢查詢好像 ?您可以使用tableGateway-> getSqlStringFromSqlObject($ select)來打印sql查詢 – Unex

+0

您是否正確「使用Zend \ Db \ Sql \ Expression;」在你的版本庫中 – Unex

+0

從我的函數查詢是 SELECT MAX(reservation_spot)AS'maxValue' FROM'reservation' WHERE'reservation_date' ='2015-09-30 08:00' – MrMorf

回答

0

您正在返回一行結果,這是您的型號的實例,而不是您想要的

在你的第一個例子中,改變這一行:

return $row->maxValue; 

必須聲明你的模型的包括maxValue場,否則將不被映射。

另一種可能性,如果你不需要在你的模型這一領域,是使用一個已經存在的領域:

$select->columns(array(
    'reservation_spot' => new Expression('MAX(reservation_spot)') 
)); 

然後:

return $row->reservation_spot; 
0
$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();