Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Использование поведения TimestampBehavior в Yii 2

Использование поведения TimestampBehavior

В заключении, давайте посмотрим на [[yii\behaviors\TimestampBehavior]] — поведение, которое позволяет автоматически обновлять атрибуты с метками времени при сохранении [[yii\db\ActiveRecord|Active Record]] моделей через insert(), update() или save().

Для начала, необходимо прикрепить поведение к классу [[yii\db\ActiveRecord|Active Record]], в котором это необходимо:



namespace app\models\User;

use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;

class User extends ActiveRecord
{
    // ...

    public function behaviors()
    {
        return [
            [
                'class' => TimestampBehavior::className(),
                'attributes' => [
                    ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
                    ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'],
                ],
                // если вместо метки времени UNIX используется datetime:
                // 'value' => new Expression('NOW()'),
            ],
        ];
    }
}

Конфигурация выше описывает следующее:

  • при вставке новой записи поведение должно присвоить текущую метку времени UNIX атрибутам created_at и updated_at;
  • при обновлении существующей записи поведение должно присвоить текущую метку времени UNIX атрибуту updated_at.

Note: Для того, чтобы приведённая выше конфигурация работала с MySQL, тип created_at и updated_at должен быть int(11). В нём будет храниться UNIX timestamp.

Теперь, если сохранить объект User, то в его атрибуты created_at и updated_at будут автоматически установлены значения метки времени UNIX на момент сохранения записи:

$user = new User;
$user->email = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.';
$user->save();
echo $user->created_at;  // выведет метку времени на момент сохранения записи

Поведение [[yii\behaviors\TimestampBehavior|TimestampBehavior]] так же содержит полезный метод [[yii\behaviors\TimestampBehavior::touch()|touch()]], который устанавливает текущую метку времени указанному атрибуту и сохраняет его в базу данных:

$user->touch('login_time');

Заберите ссылку на статью к себе, чтобы потом легко её найти ;)

Выберите, то, чем пользуетесь чаще всего:

Спасибо за внимание, оставайтесь на связи! Ниже ссылка на форум и обсуждение ; )


Обсудить эту статью

INFO: Вы отправляете сообщение как 'Гость'