Странное поведение Yii с датами

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
alex_90
Сообщения: 41
Зарегистрирован: 2012.10.03, 09:56

Странное поведение Yii с датами

Сообщение alex_90 »

Всем привет. Помогите мне разобраться с датами в Yii framework. Привожу код.

Controller:

Код: Выделить всё

$model = Patient::model()->findByPk($id);
            $old = $model->dob;
            if(!$model){
                $model = new Patient;
            } else {
                $model->attributes = $_POST['Patient'];
                if($model->validate()){
                    echo '-------', $model->dob,'-------<br />';
                    //$model->save();
                    if($model->save()){
                        echo 'S';
                    } else {
                        echo 'N';
                    }
                    echo '-------', $model->dob,'-------<br />';
                } else {
                    //$model->dob = $old;
                }
            } 
Model:

Код: Выделить всё

array('dob', 'date', 'format'=>'dd-MM-yyyy', 'allowEmpty'=>true), 
Извините за беспорядок.. Это я пытался так отловить ошибку :D
Методом [s]научного дифференцированного аналитического тыка[/s] наугад я определил, что метод save() срабатывает, но данные почему-то не записывает (вернее, записывает 0000-00-00)
Прилетает такая штука: -------20-05-1990-------
S-------20-05-1990-------


Помогите, PLZ!
Плюясь и чертыхаясь, коты переплывали реки лавы на заре мироздания.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Странное поведение Yii с датами

Сообщение lancecoder »

для мускула верный формат yyy-MM-dd
1. в беффоре валидейт переделывайте интерфейсную даты в формат мускула
2. в бефоре сейв переделывайте
maxxdev
Сообщения: 40
Зарегистрирован: 2011.12.12, 13:27

Re: Странное поведение Yii с датами

Сообщение maxxdev »

Приведи дату к виду Y-m-d перед сохранением в БД.
public function beforeSave() {
$this->dob=date('Y-m-d', strtotime($this->dob));
Аватара пользователя
alex_90
Сообщения: 41
Зарегистрирован: 2012.10.03, 09:56

Re: Странное поведение Yii с датами

Сообщение alex_90 »

lancecoder писал(а):для мускула верный формат yyy-MM-dd
1. в беффоре валидейт переделывайте интерфейсную даты в формат мускула
2. в бефоре сейв переделывайте
Сделал так:

Код: Выделить всё

protected function beforeValidate(){
        if(parent::beforeValidate()){
            $this->dob = Helpers::str2utc($this->dob);
            return true;
        }
    } 
. Теперь он не проходит валидацию. В смысле, если написать ерунду заместо даты то сохранит '0000-00-00'.
Плюясь и чертыхаясь, коты переплывали реки лавы на заре мироздания.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Странное поведение Yii с датами

Сообщение lancecoder »

ну так если перевд валидацией меняете тогда и валидировать надо по новому формату, тот который попадет в бд
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Странное поведение Yii с датами

Сообщение lancecoder »

array('dob', 'date', 'format'=>'yyyy-MM-dd', 'allowEmpty'=>true),
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: Странное поведение Yii с датами

Сообщение lancecoder »

наверно beforeValidate не лучший вариант, т.к. если у вас не пройдет валидацию то в форму вернется уже преобразованная дата, что обратно не совместимо с отправляемым форматом, и такие компоненты как datapickerы, календари не будут работать

beforeSave юзайте, сори что ввел в заблуждение, не подумал
Аватара пользователя
alex_90
Сообщения: 41
Зарегистрирован: 2012.10.03, 09:56

Re: Странное поведение Yii с датами

Сообщение alex_90 »

Спасибо за советы. Я примерно к такому же мнению пришел.. Остался один вопрос с валидацией.. Наверное придется JavaScript-ом делать..
Плюясь и чертыхаясь, коты переплывали реки лавы на заре мироздания.
Ответить