У меня проблема с построителем запросов CakePHP, пытающимся выбрать поле DATETIME и использующим функцию UNIX_TIMESTAMP ().
Это мой пользовательский поиск:
public function findApi(Query $query, array $options) {
$unixTimestamp = $query->func()->unix_timestamp(['sample_time' => 'identifier']);
return $query->select([
'sample_time' => $unixTimestamp,
'min' => 'min_psi',
'max' => 'max_psi',
])
->where([
'machine_id' => $options['machine_id'],
'sample_time >=' => $options['start'],
'sample_time <=' => $options['end']
]);
}
Но я продолжаю получатьпредупреждение «не удалось разобрать», когда я пытаюсь получить набор результатов, и мое время выборки равно false :
Warning (2): DateTimeImmutable::modify(): Failed to parse time string (1564618674) at position 8 (7): Unexpected character [CORE/src/Database/Type/DateTimeType.php, line 188]
Code Context
if ($previousHandler) {
return $previousHandler($code, $message, $file, $line, $context);
}
$value = '1564618674'
$driver = object(Cake\Database\Driver\Mysql) {
'connected' => true
}
$instance = object(Cake\I18n\FrozenTime) {
'time' => '2019-10-23T17:01:38+00:00',
'timezone' => 'UTC',
'fixedNowTime' => false
}
Cake\Core\BasePlugin::{closure}() - ROOT/vendor/cakephp/debug_kit/config/bootstrap.php, line 42
DateTimeImmutable::modify() - [internal], line ??
Cake\Database\Type\DateTimeType::toPHP() - CORE/src/Database/Type/DateTimeType.php, line 188
Cake\Database\FieldTypeConverter::__invoke() - CORE/src/Database/FieldTypeConverter.php, line 135
Cake\Database\Statement\CallbackStatement::fetch() - CORE/src/Database/Statement/CallbackStatement.php, line 59
Cake\ORM\ResultSet::_fetchResult() - CORE/src/ORM/ResultSet.php, line 487
Cake\ORM\ResultSet::valid() - CORE/src/ORM/ResultSet.php, line 277
Cake\ORM\ResultSet::first() - CORE/src/ORM/ResultSet.php, line 299
Cake\ORM\Query::first() - CORE/src/Datasource/QueryTrait.php, line 471
App\Controller\Api\WaterPressuresController::getJsonResults() - APP/Controller/Api/WaterPressuresController.php, line 64
App\Controller\Api\WaterPressuresController::index() - APP/Controller/Api/WaterPressuresController.php, line 22
Cake\Controller\Controller::invokeAction() - CORE/src/Controller/Controller.php, line 610
Cake\Http\ActionDispatcher::_invoke() - CORE/src/Http/ActionDispatcher.php, line 120
Cake\Http\ActionDispatcher::dispatch() - CORE/src/Http/ActionDispatcher.php, line 94
Cake\Http\BaseApplication::__invoke() - CORE/src/Http/BaseApplication.php, line 235
Cake\Http\Runner::__invoke() - CORE/src/Http/Runner.php, line 65
Cake\Routing\Middleware\RoutingMiddleware::__invoke() - CORE/src/Routing/Middleware/RoutingMiddleware.php, line 162
/src/Controller/Api/WaterPressuresController.php (line 66)
[
'sample_time' => false,
'min_val' => (int) 75,
'max_val' => (int) 91
]
Похоже, CakePHP пытается преобразовать поле с FieldTypeConverter. Как предотвратить преобразование, чтобы я мог использовать функцию UNIX_TIMESTAMP и получать результаты в виде целого числа вместо даты-времени?