cakephp 3 sql查询生成器错误

时间:2017-05-16 19:49:28

标签: 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]);


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

以下是错误:

  

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您   您的SQL语法有错误;检查对应的手册   您的MariaDB服务器版本,以便在附近使用正确的语法   '05 / 16/17')'在第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
    )

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

由于您在问题的评论中说您的列是包含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);
  

我建议您创建迁移以更改due_date列类型   到date