Zend Framework 2 TableGateway选择错误


Zend Framework 2 TableGateway Select error

我想知道在$reservation_datetime有多少预订。我写了这段代码,但是我有错误

可捕获的致命错误:参数1传递给Reservations'Model'ReservationTable::Reservations'Model{closure}()必须是一个Reservations'Model'Select的实例,给定的Zend'Db'Sql'Select的实例,在/home/……/vendor/zendframework/Zend - Db/src/TableGateway/AbstractTableGateway.php中调用190行,并在/home/……/module/Reservations/src/Reservations/Model/ReservationTable.php中定义99行

第99行是:

$this->num = $this->tableGateway->select(function (Select $select) {
        $select->columns(array('num' => new 'Zend'Db'Sql'Expression('COUNT(*)')));
        $select->where(array('reservation_date' => $reservation_datetime));
    });

class ReservationTable
{
    protected $tableGateway;
    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }
    public function saveReservation(Reservation $reservation)
    {
        $data = array(
            'reservation_date' => $reservation_datetime,
            ...
        );
        $reservation_spot = (int)1;
        $rsn = $this->getReservationCount($reservation_datetime);
        if($rsn < 4) {
            for($i=1; $i<4; $i++){
                if($rsn = $i) {
                    $reservation_spot++;
                }
            }
        }
        else {
            throw new 'Exception('No available spots');
        }
    }
    public function getReservationCount($reservation_datetime)
    {
        $this->num = $this->tableGateway->select(function (Select $select) {
            $select->columns(array('num' => new 'Zend'Db'Sql'Expression('COUNT(*)')));
            $select->where(array('reservation_date' => $reservation_datetime));
        });
        return $this->num;
    }    
}

您忘记包括来自Zend的Select类。在类的顶部添加这一行。

use Zend'Db'Sql'Select;

use Zend'Db'Sql'Select;
class ReservationTable
{
    protected $tableGateway;
    public function __construct(TableGateway $tableGateway)
    {
        $this->tableGateway = $tableGateway;
    }
    public function saveReservation(Reservation $reservation)
    {
        $data = array(
            'reservation_date' => $reservation_datetime,
            ...
        );
        $reservation_spot = (int)1;
        $rsn = $this->getReservationCount($reservation_datetime);
        if($rsn < 4) {
            for($i=1; $i<4; $i++){
                if($rsn = $i) {
                    $reservation_spot++;
                }
            }
        }
        else {
            throw new 'Exception('No available spots');
        }
    }
    public function getReservationCount($reservation_datetime)
    {
        $this->num = $this->tableGateway->select(function (Select $select) {
            $select->columns(array('num' => new 'Zend'Db'Sql'Expression('COUNT(*)')));
            $select->where(array('reservation_date' => $reservation_datetime));
        });
        return $this->num;
    }    
}