cakephp 3 sql 查询生成器错误

cakephp 3 sql query builder error

这是我的查询:

$today = date('m/d/y');

$todays=$this->Tasks->find()
            ->where(['user_id' => $this->Auth->user('id')])
            ->andWhere(["DATE_FORMAT(STR_TO_DATE(due_date, '%m/%d/%Y'),'%m/%d/%y')"=>$today]);


    $this->set('todays',$todays);

这是我得到的错误:

Error: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''05/16/17')' at line 1.

不知道为什么或如何解决这个问题?

这里是查询

SELECT
    Tasks.id AS `Tasks__id`,
    Tasks.user_id AS `Tasks__user_id`,
    Tasks.title AS `Tasks__title`,
    Tasks.body AS `Tasks__body`,
    Tasks.due_date AS `Tasks__due_date`,
    Tasks.complete AS `Tasks__complete`,
    Tasks.created AS `Tasks__created`,
    Tasks.modified AS `Tasks__modified` 
FROM
    tasks Tasks 
WHERE
    (
        user_id = :c0 
        AND
        DATE_FORMAT(STR_TO_DATE(due_date, '%m/%d/%y'), '%m/%d/%y') :c1
    )

由于您在问题的评论中说过您的列是一个包含 d/m/Y 格式日期的字符串,因此您只需要比较查询中的两个字符串。

$today = date('m/d/Y');

$todays = $this->Tasks->find()
            ->where(['user_id' => $this->Auth->user('id')])
            ->where(['due_date' => $today]);

$this->set('todays', $todays);

I recommend you to create a migration to change due_date column type to date.

在调用date()函数时使用大写的Y,而不是小写的y。参考 http://php.net/manual/en/function.date.php 有关格式化日期的详细信息。

但是, 始终使用日期数据类型在 mariadb 中存储日期。然后使用 $today = date("Y-m-d");然后你可以简单地比较它们而不需要转换和格式化