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

问题描述 投票:0回答:1

尝试使用 CakePHP 4 查询生成器获取给定月份内的所有日期。 以下原始查询有效,并获取正确的日期。日期以 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,但很高兴看看查询生成器是否可以实现这一点。 我浏览了文档,但没有看到类似的内容。 任何帮助将不胜感激

php sql cakephp query-builder cakephp-4.x
1个回答
0
投票

在官方 CakePHP Discord 上从其他人那里得到了答案,但是一旦参数化,它就像这样。结束函数适用于日历,否则为“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']);
© www.soinside.com 2019 - 2024. All rights reserved.