cakephp 3 sql查询生成器错误

cakephp 3 sql查询生成器错误,sql,cakephp,mariadb,Sql,Cakephp,Mariadb,我的问题是: $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]); $thi

我的问题是:

$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);
下面是我得到的错误:

错误:SQLSTATE[42000]:语法错误或访问冲突:1064您 SQL语法有错误;检查相应的手册 您的MariaDB服务器版本需要使用正确的语法 2017年5月16日,在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);
我建议您创建迁移以更改到期日列类型 迄今为止


调用date函数时使用大写Y而不是小写Y。提到 有关格式化日期的详细信息

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

到期日列的类型和格式是什么?到期日是字符串“05/16/2017”。每当遇到此类错误时,请始终显示生成的查询,即使熟悉CakePHP的人可能会发现问题-谢谢@AaronMichaelTempleton使用查询更新您的问题。始终使用日期数据类型在mariadb中存储日期。然后使用$today=日期Y-m-d;然后,您可以简单地比较它们,而无需转换和格式化。在更改到期日和$today之前,您可能会遇到前导零的问题。