【问题标题】:How to write a like query in Zend Framework 2如何在 Zend Framework 2 中编写类似查询
【发布时间】:2017-05-26 05:43:50
【问题描述】:

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

这是我的选择查询结构 ->

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

        return $selectedHotel;
}

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

代码->

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

错误->

致命错误:未捕获的错误:调用未定义的方法 Zend\Db\ResultSet\ResultSet::where() in

【问题讨论】:

标签: php mysql zend-framework


【解决方案1】:

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

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

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

希望对你有帮助

【讨论】:

    【解决方案2】:

    请查看文档: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() 你在 ->select() 方法的结果上调用 ->where() ,这显然是一个 Zend\Db\ResultSet\ResultSet。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        另一种选择是使用谓词:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-06
          • 2012-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-20
          • 1970-01-01
          • 2011-07-29
          相关资源
          最近更新 更多