Class yii\behaviors\TimestampBehavior

继承yii\behaviors\TimestampBehavior » yii\behaviors\AttributeBehavior » yii\base\Behavior » yii\base\BaseObject
实现yii\base\Configurable
可用自版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/behaviors/TimestampBehavior.php

TimestampBehavior 自动使用当前时间戳填充指定的属性.

要使用 TimestampBehavior, 请将以下代码插入到 ActiveRecord 类中:

use yii\behaviors\TimestampBehavior;

public function behaviors()
{
    return [
        TimestampBehavior::className(),
    ];
}

默认情况下, 当插入关联的 AR 对象时, TimestampBehavior 将使用当前时间戳填充created_atupdated_at属性; 当更新 AR 对象时, 它将使用当前时间戳填充updated_at属性. 时间戳值由time()获得.

由于属性值将由此行为自动设置, 所以它们通常不是用户输入的, 因此不应该被验证, 即created_atupdated_at不应该出现在模型的 rules() 方法中.

要使上述实现与 MySQL 数据库一起使用, 请将列(created_at, updated_at)声明为int(11)作为 UNIX 时间戳.

如果属性名称不同或者你想使用不同的计算时间戳的方法, 则可以配置 $createdAtAttribute, $updatedAtAttribute$value 属性, 如下所示:

use yii\db\Expression;

public function behaviors()
{
    return [
        [
            'class' => TimestampBehavior::className(),
            'createdAtAttribute' => 'create_time',
            'updatedAtAttribute' => 'update_time',
            'value' => new Expression('NOW()'),
        ],
    ];
}

如果你使用上面示例中的 yii\db\Expression 对象, 则该属性将不保存时间戳值, 而是保存记录后的表达式对象本身. 如果之后需要 DB 中的值, 则应调用该记录的 refresh() 方法.

TimestampBehavior 还提供了一个名为 touch() 的方法, 该方法允许你将当前时间戳分配给指定的属性并将其保存到数据库. 例如:

$model->touch('creation_time');

公共属性

隐藏继承的属性

属性类型描述定义在
$attributes array 要通过 $value 指定的值自动填充的属性列表. yii\behaviors\AttributeBehavior
$createdAtAttribute string 将接收时间戳值的属性. yii\behaviors\TimestampBehavior
$owner yii\base\Component|null 该行为的所有者. yii\base\Behavior
$preserveNonEmptyValues boolean 是否保留非空属性值. yii\behaviors\AttributeBehavior
$skipUpdateOnClean boolean 是否在未修改$owner没有时跳过此行为. yii\behaviors\AttributeBehavior
$updatedAtAttribute string 将接收时间戳值的属性. yii\behaviors\TimestampBehavior
$value mixed 将分配给当前属性的值. yii\behaviors\TimestampBehavior

公共方法

隐藏继承的方法

方法描述定义在
__call() 调用不是类方法的已命名方法. yii\base\BaseObject
__construct() 构造函数. yii\base\BaseObject
__get() 返回对象属性的值. yii\base\BaseObject
__isset() 检查属性是否已设置, 即已定义且不为null. yii\base\BaseObject
__set() 设置对象属性的值. yii\base\BaseObject
__unset() 将对象属性设置为null. yii\base\BaseObject
attach() 将行为对象附加到组件. yii\base\Behavior
canGetProperty() 返回一个值, 指示属性是否可读. yii\base\BaseObject
canSetProperty() 返回一个值, 指示属性是否可写. yii\base\BaseObject
className() 返回此类的完全限定名称. yii\base\BaseObject
detach() 从组件中分离行为对象. yii\base\Behavior
evaluateAttributes() 计算属性值并将其分配给当前属性. yii\behaviors\AttributeBehavior
events() 声明 所有者 事件的事件处理程序. yii\behaviors\AttributeBehavior
hasMethod() 返回一个值, 指示方法是否已定义. yii\base\BaseObject
hasProperty() 返回一个值, 指示属性是否已定义. yii\base\BaseObject
init() 初始化对象. yii\behaviors\TimestampBehavior
touch() 将时间戳记属性更新为当前时间戳. yii\behaviors\TimestampBehavior

受保护的方法

隐藏继承的方法

方法描述定义在
getValue() 返回当前属性的值. yii\behaviors\TimestampBehavior

属性详情

$createdAtAttribute public 属性

将接收时间戳值的属性.

如果你不想记录创建时间, 请将此属性设置为false.

public string $createdAtAttribute 'created_at'
$updatedAtAttribute public 属性

将接收时间戳值的属性.

如果你不想记录更新时间, 请将此属性设置为false.

public string $updatedAtAttribute 'updated_at'
$value public 属性

如果值为null, 则 PHP 函数 time() 的结果将用作值.

将分配给当前属性的值.

这可以是一个匿名函数, 可以以数组格式调用(eg. [$this, 'methodName']), 一个表示数据库(DB)表达式的 Expression 对象(eg. new Expression('NOW()')), 标量, 字符串或任意值. 如果是前者, 则将函数的返回值分配给属性.

函数的签名应该如下:

function ($event)
{
    // 返回值将分配给该属性
}
public mixed $value null

方法详情

getValue() protected 方法

返回当前属性的值.

如果 $valuenull, 将使用 PHP 函数 time() 的结果作为值.

该方法由 evaluateAttributes() 调用. 其返回值将被分配给与触发事件相对应的属性.

protected mixed getValue ( $event )
$event yii\base\Event

触发当前属性更新的事件.

return mixed

属性的值.

init() public 方法

初始化对象.

在使用给定的配置初始化对象之后, 在构造函数的末尾调用此方法.

public void init ( )
touch() public 方法

将时间戳记属性更新为当前时间戳.

$model->touch('lastVisit');
public void touch ( $attribute )
$attribute string

要更新的属性名称.

throws yii\base\InvalidCallException

如果所有者是新记录(自版本 2.0.6 起).