2016-06-08 4 views
1

У меня есть команда:Yii CDbCommand возвращает значение, отличное клиентов MySQL

$night_command = Yii::app()->db->createCommand() 
    ->select('COUNT(d1.id)') 
    ->from('diary1 as d1') 
    ->where('d1.deleted = 0 AND TIME(d1.datetime_created) BETWEEN "04:59:00" AND "17:59:00"'); 
$night_command->getText(); // this is query that i copy to client app 
$night_command->queryScalar(); // returns 4 

$night_command->getText() возвращает запрос:

SELECT COUNT(d1.id) 
FROM `diary1` `d1` 
WHERE d1.deleted = 0 AND TIME(d1.datetime_created) BETWEEN "04:59:00" AND "17:59:00" 

Когда я скопировать и запустить этот запрос - я получаю 25 (а не 4). Зачем? Похоже, что это проблема со временем сравнения, потому что без него все работает хорошо. Столбец datetime_created имеет тип DATETIME.

+0

Какая ошибка? Результат yii? Не могли бы вы использовать кеширование запросов на компоненте db до вашего кода? – georaldc

ответ

0

Проблема была в конфигурации db компонента. Он имеет параметр

'initSQLs' => array(
    'SET time_zone = "+10:00"', 
), 

, добавляющие +10 (+8 в моем случае) часов DATETIME колонка. Например. если в БД есть значение «11.01.2016 13:21:05» (мой часовой пояс - UTC + 2), то Yii возвращает значение «11-01-2016 21:21:05» (для UTC + 10). Итак, или комментируйте этот параметр или имейте в виду, что столбцы DATETIME и TIME будут иметь разное значение в Yii.

Смежные вопросы