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之前,您可能会遇到前导零的问题。