如何在 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.'%')
]);
我创建了一个运行良好的 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.'%')
]);