获取当月内的所有日期 CakePHP 4 查询生成器

Get all dates within a current month CakePHP 4 Query Builder

提问人:SamWalker 提问时间:11/14/2023 更新时间:11/14/2023 访问量:36

问:

尝试使用 CakePHP 4 Query Builder 获取给定月份内的所有日期。 以下原始查询有效,并获取正确的日期。日期以 Y-m-d 格式存储

 $connection = ConnectionManager::get('default');
        $exams = $connection->execute('SELECT * FROM ielts_exam_dates WHERE MONTH(date_of_exam) = MONTH(CURRENT_DATE);')
        ->fetchAll('assoc');

而以下和大多数变体不起作用,只返回一个空集。没有错误,只是没有找到任何日期。 我想我也尝试过日期格式。

    $venues = $this->IeltsVenues->find()
            ->contain([
                'Venues', 
                'Venues' => [
                    'VenueAddresses', 
                    'VenueDetails'
                ],
                'IeltsExamDates' => function (Query $q) use ($moduleId) {
                    return $q->where(['AND' => [
                        'ielts_module_type_id' => $moduleId,
                        'MONTH(date_of_exam)' => 'MONTH(CURRENT_DATE)', 
                        ]])
                    ->contain(['IeltsModuleTypes', 'IeltsExamTypes']);
                }
            ])
            ->where(['ielts_city_id' => $cityId]);

虽然我可以做原始连接和 sql,但很高兴看到这是否可以使用查询构建器。 我浏览了文档,没有看到类似的东西。 任何帮助将不胜感激

sql 蛋糕php 查询生成器 cakephp-4.x

评论

0赞 Salines 11/14/2023
尝试 ' 'MONTH(date_of_exam)' => date('n')'

答:

0赞 SamWalker 11/14/2023 #1

在官方 CakePHP Discord 上从其他人那里得到了答案,但一旦参数化,情况就是这样。End 函数用于日历,否则它的 'CURRENT_DATE' 其中 ':exam_date' 是。

'IeltsExamDates' => function (Query $q) use ($moduleId, $date) {
                    return $q->where(['AND' => [
                        'ielts_module_type_id' => $moduleId,
                        'MONTH(date_of_exam) = MONTH(:exam_date)', 
                        ]])->bind(':exam_date', $date, 'date')
                    ->contain(['IeltsModuleTypes', 'IeltsExamTypes']);