【问题标题】:Between clause for cakephp 3cakephp 3 之间的子句
【发布时间】:2016-07-08 08:29:43
【问题描述】:
select * from user where HOUR(NOW()) BETWEEN earliest_login AND latest_login

earliest_loginlatest_login 是两列。

请告诉我如何在 cakephp3 中写这个

我试过的代码是:

$query->where(
    [
        function($exp) {
            return $exp->between('HOUR(NOW())', 'earliest_login', 'latest_login');
        }

它不工作。

如果有人有解决方案,请告诉我。

【问题讨论】:

  • 你收到错误了吗?
  • 是的,查询对象参数类型为 early_login 和 latest_login 的查询未正确执行
  • 您需要对传递给between() 的参数使用表达式,或者改用值绑定。我已经更新了@YosiAzwan 提到的重复问题答案中的代码示例

标签: php mysql cakephp-3.0 query-builder between


【解决方案1】:

字段名用在表达式中,SQL sn-ps 绝不应包含不受信任的内容。

您可以使用:

$query = $users->find()
->where(function ($exp, $q) {
    return $exp->between('Users.created', date1, date2);
})

这将创建类似的 sql:

select * from users  WHERE created BETWEEN '$date1' AND '$date2'

你也可以在查询中使用gt()和lt()

$query = $articles->find()
    ->where(function ($exp) {
   return $exp
        ->gt('created', '2016-07-05 12:02:15')
        ->lt('created', '2016-07-10 12:02:15');
});

如果想要两个日期之间的差异

$query = $this->Users->find();

$diff= $query->func()->dateDiff(['2016-07-04 12:02:15', '2016-07-07 18:29:57']);

$query->select(['difference' => $diff,]);

欲了解更多信息,请阅读此链接 http://book.cakephp.org/3.0/en/orm/query-builder.html

【讨论】:

  • 您的示例解决的案例与 OP 显示的案例不同。
猜你喜欢
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 1970-01-01
  • 2016-04-19
  • 2018-01-08
相关资源
最近更新 更多