如何在 Zend Framework 2 中编写类似查询

How to write a like query in Zend Framework 2

我创建了一个运行良好的 select 查询。但现在我需要将其更改为类似的查询。谁能告诉我正确的方法?

这是我的 select 查询结构 ->

public function getSelectedHotel($id)
{
    $selectedHotel = $this->tableGateway->select(['hotel_id' => $id]);

        return $selectedHotel;
}

当我这样编码时,它给我这个错误。

代码 ->

$hotelsByYear = $this->tableGateway->select()->where('date_added like ?',$year.'%');

错误 ->

Fatal error: Uncaught Error: Call to undefined method Zend\Db\ResultSet\ResultSet::where() in

请查看文档:https://framework.zend.com/manual/2.2/en/modules/zend.db.table-gateway.html#basic-usage

应该是这样的:

$hotelsByYear = $this->tableGateway->select(function (Select $select) {
    $select->where->like('date_added', $year.'%');
});

说明: 每次你调用 $tableGateway->select() 查询都会被执行,所以如果你调用 $tableGateway->select()->where() 你调用 ->where() 结果->select() 方法,这显然是一个 Zend\Db\ResultSet\ResultSet.

请尝试以下代码或参考 official document

$where = new Where();    
$where->like('Field_Name', '%'.$ParamVal.'%');
//use as below
$this->tableGateway->select($where);

别忘了使用Zend\Db\Sql\Where;

希望对您有所帮助

$table->select()->where('Field_Name', '%'.$ParamVal.'%');

另一种选择是使用谓词:

$selectedHotel = $this->tableGateway->select([
    'hotel_id' => $id,
    new \Zend\Db\Sql\Predicate\Like('date_added', $year.'%')
]);