尝试使用 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,但很高兴看看查询生成器是否可以实现这一点。 我浏览了文档,但没有看到类似的内容。 任何帮助将不胜感激
在官方 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']);