【发布时间】:2019-07-24 00:03:28
【问题描述】:
我正在查找两个日期之间的所有记录
我的变量
$start = '01/01/2009';
$end = '07/24/2019';
我试过了
$gross = $this->CartOrders->find('all')->where(['placed >=' => $start])->andWhere(['placed <=' => $end])->all();
上面的查询片段
... FROM cart_orders CartOrders
WHERE (placed >= :c0 AND placed <= :c1)
[params] => Array (
[:c0] => Array ( [value] => 01/01/2009 [type] => datetime [placeholder] => c0 )
[:c1] => Array ( [value] => 07/24/2019 [type] => datetime [placeholder] => c1 ) )
结果
Cake\ORM\ResultSet Object ( [items] => Array ( ) )
我也试过
$gross = $this->CartOrders->find('all')->where(function($exp) use($start,$end) {
$exp->lte('placed', $end);
$exp->gte('placed', $start);
return $exp;
})->all();
我也试过
$gross = $this->CartOrders->find('all')->where(function($q) use($start,$end) {
return $q->between('CartOrders.placed', $start, $end, 'date');
})->all();
关于如何实现这一点的任何想法?
【问题讨论】:
-
所有这些例子都应该有效。
-
那就让我再摆弄一下吧……
-
我刚刚尝试了 andWhere 版本,并检查了日期,如果我删除了 andWhere,它会给我在 $start 之后创建的所有内容,但是当我添加 andWhere 时,它什么也没给我。 ..
-
有没有可能是语言环境问题,并且结束日期被误解了?也许尝试将这些日期放入
FrozenDate对象并使用where中的那些? -
MM/DD/YYYY绝对是错误的格式,您的数据库很可能在各自的日期(时间)列中使用YYYY-MM-DD,如果没有,那么您需要更改它,因为02/01/2019大于01/02/2019。
标签: cakephp cakephp-3.x cakephp-3.6