AutoTimestampBehavior — время создания и модификации модели

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Аватара пользователя
MOTORIST
Сообщения: 245
Зарегистрирован: 2010.06.24, 10:04

Re: AutoTimestampBehavior — время создания и модификации мод

Сообщение MOTORIST »

При валидации если в поле ничего нет, то выводит NOW().
В сознании новичка много возможностей, в сознании эксперта — лишь несколько.
jackal
Сообщения: 19
Зарегистрирован: 2011.06.29, 16:11

Re: AutoTimestampBehavior — время создания и модификации мод

Сообщение jackal »

Sam Dark писал(а):Позволяет автоматически заполнять время создания и изменения модели.

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

<?php
class AutoTimestampBehavior extends CActiveRecordBehavior {
 
    /**
    * Имя поля, хранящего время создания модели.
    */
    public $created = 'created';
    /**
    * Имя поля, хранящего время изменения модели.
    */
    public $modified = 'modified';
 
 
    public function beforeValidate($on) {
        if ($this->Owner->isNewRecord)
            $this->Owner->{$this->created} = new CDbExpression('NOW()');
        else
            $this->Owner->{$this->modified} = new CDbExpression('NOW()');
 
        return true;    
    }
} 
Установка
В модели:

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

public function behaviors(){
    return array(
        'AutoTimestampBehavior' => array(
            'class' => 'application.components.AutoTimestampBehavior',
            //Тут можно переопределить названия полей, хранящих время создания и изменения модели.
        )
    );
}
 
Оригинал: http://www.yiiframework.com/doc/cookbook/14/
Можете объяснить подробно откуда и за счет чего происходит вызов AutoTimestampBehavior::beforeValidate() ?
jackal
Сообщения: 19
Зарегистрирован: 2011.06.29, 16:11

Re: AutoTimestampBehavior — время создания и модификации мод

Сообщение jackal »

фу, понял наконец то, через $behavior->attach($this); поведение еще и регится как обработчик событий... Не мог понять как поведения попадают в Сcomponent->_e , мудрено все :)
arbuscula
Сообщения: 14
Зарегистрирован: 2011.02.20, 20:03

Re: AutoTimestampBehavior — время создания и модификации мод

Сообщение arbuscula »

А можно и при помощи Триггеров MySQL. Например так:

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

DELIMITER // 
DROP TRIGGER IF EXISTS `order_default_datetime`//
CREATE TRIGGER `order_default_datetime` 
BEFORE INSERT ON `order`
FOR EACH ROW BEGIN
    IF NEW.`date`='0000-00-00 00:00:00' THEN
        SET NEW.`date`=NOW();
    END IF;
END;//
Ответить