Формат даты и запись в БД

Есть в модели поле "Дата", для него создал правило с описанием dateFormat "dd.mm.yyyy", правило работает нормально. Но при записи (обычный save) в БД (поле типа datetime) модель вопреки ожиданиям не учитывает заданный формат и не преобразовывает автоматически значение к формату, к принятому в мускуле. Есть ли решения, более изящные, чем ручная обработка поля в beforeSave?

Нашел только http://www.yiiframework.com/extension/i18n-datetime-behavior, но в 1.1 оно не заработало, да сам предложенный алгоритм кажется излишне замороченным.

Я бы на вашем месте использовал таймстэмп для поля даты. Оно имеет формат "дд-мм-гггг чч-мм-сс". При этом если кидаешь в него только часть даты "дд-мм-гггг" - то остальное оно делает нулями. Поэтому проблем в преобразовании не будет. А при редактировании этого поля вы можете просто отсекать ту часть которая отвечает за время.

Александр.

Я в похожей ситуации просто переопределил save() т.е. он перед сохранением приводит в порядок поля а потом вызывает родительский save()

в вашем случае можно сделать примерно так




function save()

{

...

   $this->mydate = date("d-m-Y",strtotime($this->mydate));

   return parent::save();

...

}



Zolter часто в жизни не все можно подстроить под себя или как тебе хочется :)

Tima, спасибо, я надеялся, что есть более красивое решение. И мне кажется, такие вещи логичнее описывать в beforeSave.

Zolter, timestamp проблему не решает, автоматического преобразования "dd.mm.yyyy"=>"yyyy-mm-dd" не происходит. Странно как-то, модели ведь известен используемый мной формат (благодаря правилу), известен тип поля таблицы БД, ну чего проще преобразовать автоматически?

Tima, имхо того же самого можно добиться и путем beforeSave()

Ну тогда beforeSave или писать свой бехавиор для преобразования

Но мне кажется проще просто исправить формат в котором пишет календарь

Уже на помню где, но когда-то вычитал что для БД быстрее работать с integer, поэтому я использую даты:

для записи time()

для считывания date()

Мне удобно - формат настраивается очень просто.

P.S. Еще можно использовать UNIX_TIMESTAMP и работать с int прямо в БД.

Rsol, просто мне самому удобнее, когда дата хранится в открытом виде.

to RSol

Если требуется искать в базе по диопазонам, или к примеру найти все даты за конкретный месяц всех годов - то намного удобнее работать не с интом. Так что тут зависит от того для каких целей используется поле. Если чисто как информация - тогда без разницы инт там или дата ИМХО

Согласен что задача поиска интервалов не совсем тривиальная, но и совсем не сложная. Функция mktimeb[/b] решает эти задачи.

Это лишние движения искать интервал в php и передавать в запрос, если в самом sql есть штатные функции работы с таймстэмпом и дататамймом для вычисления интервала и тп :)

Ладно перестаем флудить :)