Oracle + DATE

Добрый день!

Такая проблема. Yii не получает из ораклиной базы время. Он селектит поле типа "DATE" как строку, соответственно отображается только дата.

Вопрос в общем-то сводится к следующему: как сделать, чтобы конкретное поле селектилось через функцию, например, TO_CHAR(date_field,‘YYYYMMDD HH24’)? Меня бы это вполне устроило.


        $criteria = new CDbCriteria();

        $criteria->select = 'TO_DAYS( FROM_UNIXTIME( datetime ) ) AS datetime';

        $entry = Logs::model()->find($criteria);

        if (!empty($entry))

        {

            var_dump($entry->datetime);

        } else {

            echo 'no records yet';

        }

$criteria->select!

Точно!

Спасибо. :)

У меня вопрос на ту же тему.

С изменением запроса всё понятно. Но можно ли как-то изменить саму модель, чтобы при вызове, скажем, [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'");

	}

}

всё заработало. вдруг кому-то поможет.