Такая проблема. Yii не получает из ораклиной базы время. Он селектит поле типа "DATE" как строку, соответственно отображается только дата.
Вопрос в общем-то сводится к следующему: как сделать, чтобы конкретное поле селектилось через функцию, например, TO_CHAR(date_field,‘YYYYMMDD HH24’)? Меня бы это вполне устроило.
С изменением запроса всё понятно. Но можно ли как-то изменить саму модель, чтобы при вызове, скажем, [font="Courier New"]$model->find()[/font] в атрибуты автоматически попадала нормальная дата/время Oracle (пусть даже и в виде строки), например, 01-01-2001 23:59:59, вместо того, что попадает по умолчанию (01-JAN-01)?
Простите, столько времени прошло. Кто-то победил это? это явно какие-то грабли oci. Но TO_CHAR не вариант. Нужно чтобы в модели нормально попадало. замучился в oci рыться. причем еще прикол такой у него, если делать вот так:
Yii2
public function getMessages() {
return $this->hasMany(OrderMessage::className(), ['ORDID' => 'ID'])
->select("TO_CHAR(WHNCRT, 'DD-MM-YYYY HH24:MI:SS') AS WHNCRT, MSG")
->orderBy('WHNCRT');
}
то он неверно ставит кавычки, зачем-то пытаясь обернуть ‘DD-MM-YYYY HH24:MI:SS’ и получается такое:
SELECT TO_CHAR(WHNCRT, "'DD-MM-YYYY HH24:MI:SS')" AS "WHNCRT"
кавычка за скобкой. причем такое поведение замечено и с nvl и с другими функциями.
т.е. даже тучар в связи не используешь нормально. и остается только писать нативные запросы
апд…
поторопился я.
решил вопрос так:
переопределил подключение:
<?php
namespace common\components;
use apaoww\oci8\Oci8DbConnection;
/**
*@author gobsek
*
* Переопределяем коннекшн к ораклу чтобы модифицировать формат даты для каждой сессии,
* иначе в поле модели данные из полей DATE попадают без времени
*/
class OraConnection extends Oci8DbConnection {
public function initConnection() {
parent::initConnection();
$this->pdo->exec("alter session set NLS_DATE_FORMAT='DD-MM-YYYY HH24:MI:SS'");
}
}