CakePHP 3 两个日期之间
CakePHP 3 Between two date
我尝试在我的控制器中进行查询,我想找到开始日期和结束日期在 NOW() 之间的所有实体,
如果 $start 和 $end 在 NOW() 之间,那么显示所有实体,但我没有成功
我的发现是:
$day = date('l');
$now = Time::now();
$tvs = $this->Tvs
->find('all')
->contain(['Users'])
->where(['Tvs.day' => $day])
->andWhere(function($exp) {
return $exp->between($now, 'Tvs.start', 'tvs.end', $now);
});
如何查询?
感谢您的帮助!
假设您要查找在 start
和 end
之间具有 $now
的所有记录,查询是
因为手册说 between 函数的第一个参数应该是字段名称(所以它不能是日期)而不是 between 你可以使用两个比较
$tvs = $this->Tvs
->find('all')
->contain(['Users'])
->where(['Tvs.day' => $day])
->andWhere(function($exp) use($now) {
$exp->lte('Tvs.start', $now);
$exp->gte('Tvs.end', $now);
return $exp;
});
无论如何,如果 $now 变量包含与 NOW() 函数相同的值,您可以直接在查询中使用 mysql NOW() 函数
->andWhere(function($exp, $q) {
return $exp->between($q->func()->now(), 'Tvs.start', 'Tvs.end');
});
还有另一种方法:您可以使用 BETWEEN 和占位符来绑定 $now
的值
->andWhere([':now BETWEEN Tvs.start AND Tvs.end'])
->bind(':now', $now, 'datetime');
或使用 cakephp sql 函数
->where(function($exp, $q) {
return $exp->between(':now', 'Tvs.start', 'Tvs.end');
})
->bind(':now', $now, 'datetime');
从 CakePHP 3.6 开始,您可以使用标识符:
return $query->where(function ($exp, $q) {
$today = $q->func()->now();
$start = $q->identifier('Tvs.start');
$end = $q->identifier('Tvs.end');
return $exp
->between($today,$start,$end);
});
我尝试在我的控制器中进行查询,我想找到开始日期和结束日期在 NOW() 之间的所有实体, 如果 $start 和 $end 在 NOW() 之间,那么显示所有实体,但我没有成功
我的发现是:
$day = date('l');
$now = Time::now();
$tvs = $this->Tvs
->find('all')
->contain(['Users'])
->where(['Tvs.day' => $day])
->andWhere(function($exp) {
return $exp->between($now, 'Tvs.start', 'tvs.end', $now);
});
如何查询? 感谢您的帮助!
假设您要查找在 start
和 end
之间具有 $now
的所有记录,查询是
因为手册说 between 函数的第一个参数应该是字段名称(所以它不能是日期)而不是 between 你可以使用两个比较
$tvs = $this->Tvs
->find('all')
->contain(['Users'])
->where(['Tvs.day' => $day])
->andWhere(function($exp) use($now) {
$exp->lte('Tvs.start', $now);
$exp->gte('Tvs.end', $now);
return $exp;
});
无论如何,如果 $now 变量包含与 NOW() 函数相同的值,您可以直接在查询中使用 mysql NOW() 函数
->andWhere(function($exp, $q) {
return $exp->between($q->func()->now(), 'Tvs.start', 'Tvs.end');
});
还有另一种方法:您可以使用 BETWEEN 和占位符来绑定 $now
的值 ->andWhere([':now BETWEEN Tvs.start AND Tvs.end'])
->bind(':now', $now, 'datetime');
或使用 cakephp sql 函数
->where(function($exp, $q) {
return $exp->between(':now', 'Tvs.start', 'Tvs.end');
})
->bind(':now', $now, 'datetime');
从 CakePHP 3.6 开始,您可以使用标识符:
return $query->where(function ($exp, $q) {
$today = $q->func()->now();
$start = $q->identifier('Tvs.start');
$end = $q->identifier('Tvs.end');
return $exp
->between($today,$start,$end);
});