尝试将 sql 查询详细说明到 cakephp 时总是出错;如何转换这个?

Posted

技术标签:

【中文标题】尝试将 sql 查询详细说明到 cakephp 时总是出错;如何转换这个?【英文标题】:always getting error trying to elaborate sql query into cakephp; how to convert this one? 【发布时间】:2022-01-12 01:38:15 【问题描述】:

如果我在 phpMyAdmin (SQL) 语句中使用以下代码,它会起作用,并且我会得到接下来 31 天的所有生日列表。这是我的代码:

SELECT
    *
FROM
    membres 
WHERE
    DATE_ADD(
        date_de_naissance,
        INTERVAL
            YEAR(CURDATE()) -
            YEAR(date_de_naissance) +
            IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(date_de_naissance), 1, 0)
        YEAR
    )
    BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 31 DAY)
    AND
    (
        MONTH(date_de_naissance) <> MONTH(CURDATE())
        OR
        DAY(date_de_naissance) <> DAY(CURDATE())
    )

在 Cakephp 中会怎样?请帮忙

【问题讨论】:

【参考方案1】:

我通常发现在 CakePHP 中做日期数学比在 mysql 中容易得多,所以我会做这样的事情:

$birthday_members = $this->Membres->find()
    ->where([
        'date_de_naissance >' => Cake\I18n\FrozenDate::now(),
        'date_de_naissance <=' => Cake\I18n\FrozenDate::now()->addDays(31),
    ]);

【讨论】:

因为我有 3.4x,这是消息:错误:[错误] 类 'App\Controller\FrozenDate' 未在中找到 我假设你知道命名空间在 PHP 中是如何工作的;它确实使代码更具可读性,而不是添加那种混乱。在文件顶部为该类添加use,或将完整的类命名空间放在此处的代码中。 FrozenDate 不是 3.4x 中可用的类,如何让它可用?或修改提议的声明.. 其实是available in 3.4。

以上是关于尝试将 sql 查询详细说明到 cakephp 时总是出错;如何转换这个?的主要内容,如果未能解决你的问题,请参考以下文章

将老式查询字符串重写为现代 cakephp URL

制定 sql 查询时遇到问题

对 CakePHP 的 SQL 查询 [关闭]

多个 SQL 查询未在 Cakephp 中执行

CakePHP模型属于SQL查询

cakephp中sql查询大于