gpt4 book ai didi

php - ZF2 日期之间

转载 作者:行者123 更新时间:2023-11-29 07:50:19 26 4
gpt4 key购买 nike

我无法在 Zend Framework 2 中成功检索两个日期之间的记录。

我的代码如下所示:

 $select = $this->getTimeTable();
$predicate = new \Zend\Db\Sql\Where();
$select->where($predicate->between("start_date", $week_sunday_date , $satruday_date));

public function getTimeTable()
{
if (!$this->timeTable)
{
$this->timeTable = new TableGateway(
'time',
$this->getServiceLocator()->get('Zend\Db\Adapter\Adapter')

);
}
return $this->timeTable;
}

“start_date”是我的数据库中 DATETIME 类型的列, $week_sunday_date 、 $satruday_date 均按如下方式生成

  $week_sunday_date = date("Y-m-d\TH:i:sP",strtotime('this sunday'));
$satruday_date = date("Y-m-d\TH:i:sP",strtotime("+6 day", strtotime($week_sunday_date)));

数据库连接良好,否则我可以获取数据。转储上面的 $week_sunday_date 和 $satruday_date 变量,我看到:

字符串(25)“2014-11-08T00:00:00+00:00”字符串(25)“2014-11-02T00:00:00+00:00”

我还尝试了其他几种方法,但最终页面是空白的,并且由于错误而无法加载。

看来我需要这样的东西:

$statement = $sql->prepareStatementForSqlObject($select);
$time_list = $statement->execute();

但不确定如何正确初始化 $sql。

最佳答案

我认为正确的语法是:

$select->where->between('start_date', $week_sunday_date, $saturday_date);

哦,但是由于在您的情况下 $select 是 TableGateway 的实例,那么您可能需要 $select->getSql()->where-> Between(... )

<小时/>

我对 TableGateway 有点生疏,我们已经不再使用它了。但我认为你可以这样做:

$timeTable = new TableGateway(/*...*/);
$select = $timeTable->getSql()->select();
$select->columns(array('col1', 'col2'));
$select->where->between('start_date', $week_sunday_date, $saturday_date);
$resultSet = $timeTable->selectWith($select);
var_dump($resultSet->toArray());

注意:我不建议总是将结果集转换为数组,但能够出于调试目的这样做是很好的。

<小时/>

不使用 TableGateway 的示例:

查询类:

namespace Example\Model\Sql\Select;

use Zend\Db\Sql\Select;

class Time extends Select {

public function __construct($week_sunday_date, $saturday_date) {
parent::__construct(['t' => 'Time']);

$this->columns([
'col1',
'col2',
]);

$this->where->between('start_date', $week_sunday_date, $saturday_date);
}
}

数据模型:(基本上是一个美化的数组对象,只保存数据,没有业务逻辑)

namespace Example\Model\DataContainer;

class Time extends \ArrayObject {

protected $col1;
protected $col2;

public function exchangeArray($data) {
$this->col1 = $data['col1'];
$this->col2 = $data['col2'];
}

public function getCol1() {
return $col1;
}

public function getCol2() {
return $col2;
}
}

Controller :

namespace Example\Controller;

use Example\Model\DataContainer;
use Example\Model\Sql\Select;
use Zend\Db\ResultSet\ResultSet;

class IndexController {

public function myExampleAction() {
$request = $this->getRequest();
$sm = $this->getServiceLocator();

$query = new Select\Time($request->getQuery('sunday'), $request->getQuery('saturday'));
$resultSet = new ResultSet(ResultSet::TYPE_ARRAYOBJECT, new DataContainer\Time());

$executer = $sm->get('Executer');
$resultSet = $executer->execute($query, $resultSet);

return [
'time' => $resultSet, // loop through results in your view
];
}
}

因此,我们创建了查询类的一个实例,当您通过创建它的新实例来隐式调用构造函数时,就会设置该实例。我们将参数传递给它。然后,我们创建结果集类的实例,并指定数组对象原型(prototype)。查询返回的每一行都将填充为数组对象原型(prototype)的实例。当结果集初始化时,它会自动调用exchangeArray()并返回当前行的数据。该方法会填充数据容器,因此结果集会填充这些填充的数据容器对象的数组。因此,当您循环访问结果集时,每一行都将由数组对象原型(prototype)的一个实例表示。

您必须定义自己的执行器类。那不是内置的。您必须创建它并将其添加到服务配置中,以便您可以像我在示例中所做的那样从服务管理器中获取它。

关于php - ZF2 日期之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26617273/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com