CTimestampBehavior

优质
小牛编辑
132浏览
2023-12-01
所有包 | 属性 | 方法
zii.behaviors
继承class CTimestampBehavior » CActiveRecordBehavior » CModelBehavior » CBehavior » CComponent
实现IBehavior
源自1.1
版本$Id: CTimestampBehavior.php 3229 2011-05-21 00:20:29Z alexander.makarow $
源码framework/zii/behaviors/CTimestampBehavior.php
CTimestampBehavior会自动填充日期和时间相关的属性。

会自动填充日期时间属性当active record 被创建以及/或者更新时。 你可以像下面这样指定一个active record模型类来使用此behavior:
public function behaviors(){
return array(
'CTimestampBehavior' => array(
'class' => 'zii.behaviors.CTimestampBehavior',
'createAttribute' => 'create_time_attribute',
'updateAttribute' => 'update_time_attribute',
)
);
}
createAttribute和updateAttribute选项实际上分别默认为‘create_time’和‘update_time’, 因此设置它们并非必须。如果你不希望CTimestampBehavior 为该record的更新或创建设置一个timestamp值,可以设定相应的属性选项为null。

默认情况下,update属性只在记录被更新是才被设置。如果你想让其在记录被创建的时候也被设置, 可将setUpdateOnCreate选项设置为true。

尽管CTimestampBehavior会自行决定将什么样的值写入timestamp类型的属性, 你仍然可以通过timestampExpression用自定义的值来替代它

公共属性

隐藏继承属性

属性类型描述定义在
createAttributemixed用来存储创建时间属性的名称。 设置为null是创建属性不使用一个时间戳。默认是‘create_time’CTimestampBehavior
enabledboolean事件是否被启用。CBehavior
ownerCComponent获得附加行为的组件。CBehavior
setUpdateOnCreatebool更新属性是否设置在创建时创建时间戳。 否则将被单独留下。默认为false。CTimestampBehavior
timestampExpressionmixed将用于生成时间戳的表达式。 它可以是一个字符串,代表一个PHP表达式(例如:'itme()'), 或者一个CDbExpression对象代表一个DB表达式(例如:new CDbExpression('NOW()'))。 默认为空,这意味着我们将尝试自动计算出相应的时间戳。 如果我们不能找到合适的时间戳, 然后,它会后退到当前的UNIX时间戳CTimestampBehavior
updateAttributemixed用来存储修改时间属性的名称。 设置为null是更新属性不使用一个时间戳。默认是‘update_time’CTimestampBehavior

受保护属性

隐藏继承属性

属性类型描述定义在
maparray映射列类型到数据库的方法CTimestampBehavior

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。CComponent
__set()设置一个组件的属性值。CComponent
__unset()设置一个组件的属性为null。CComponent
afterConstruct()响应CModel::onAfterConstruct事件。CModelBehavior
afterDelete()响应到 CActiveRecord::onAfterDelete 事件。CActiveRecordBehavior
afterFind()响应到 CActiveRecord::onAfterFind 事件。CActiveRecordBehavior
afterSave()响应到 CActiveRecord::onAfterSave 事件。CActiveRecordBehavior
afterValidate()响应CModel::onAfterValidate事件。CModelBehavior
asa()返回这个名字的行为对象。CComponent
attach()附加事件处理程序到组件。CBehavior
attachBehavior()附加一个行为到组件。CComponent
attachBehaviors()附加一个行为列表到组件。CComponent
attachEventHandler()为事件附加一个事件处理程序。CComponent
beforeDelete()响应到 CActiveRecord::onBeforeDelete 事件。CActiveRecordBehavior
beforeFind()响应到 CActiveRecord::onBeforeFind 事件。CActiveRecordBehavior
beforeSave()响应CModel::onBeforeSave事件。CTimestampBehavior
beforeValidate()响应CModel::onBeforeValidate事件。CModelBehavior
canGetProperty()确定属性是否可读。CComponent
canSetProperty()确定属性是否可写。CComponent
detach()从组件分离行为对象。CBehavior
detachBehavior()从组件中分离一个行为。CComponent
detachBehaviors()从组件中分离所有行为。CComponent
detachEventHandler()分离一个存在的事件处理程序。CComponent
disableBehavior()禁用一个附加行为。CComponent
disableBehaviors()禁用组件附加的所有行为。CComponent
enableBehavior()启用一个附加行为。CComponent
enableBehaviors()启用组件附加的所有行为。CComponent
evaluateExpression()计算一个PHP表达式,或根据组件上下文执行回调。CComponent
events()定义事件和相应的事件处理方法。CActiveRecordBehavior
getEnabled()返回事件是否被启用。CBehavior
getEventHandlers()返回一个事件的附加处理程序列表。CComponent
getOwner()返回获得附加行为的组件。CBehavior
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
raiseEvent()发起一个事件。CComponent
setEnabled()设置是否启用行为CBehavior

受保护方法

隐藏继承方法

方法描述定义在
getTimestampByAttribute()获得合适的时间戳取决于列类型$attributeCTimestampBehavior
getTimestampByColumnType()返回合适的时间戳取决于$columnTypeCTimestampBehavior

属性详细

createAttribute 属性 public mixed $createAttribute;

用来存储创建时间属性的名称。 设置为null是创建属性不使用一个时间戳。默认是‘create_time’

map 属性 protected static array $map;

映射列类型到数据库的方法

setUpdateOnCreate 属性 public bool $setUpdateOnCreate;

更新属性是否设置在创建时创建时间戳。 否则将被单独留下。默认为false。

timestampExpression 属性 public mixed $timestampExpression;

将用于生成时间戳的表达式。 它可以是一个字符串,代表一个PHP表达式(例如:'itme()'), 或者一个CDbExpression对象代表一个DB表达式(例如:new CDbExpression('NOW()'))。 默认为空,这意味着我们将尝试自动计算出相应的时间戳。 如果我们不能找到合适的时间戳, 然后,它会后退到当前的UNIX时间戳

updateAttribute 属性 public mixed $updateAttribute;

用来存储修改时间属性的名称。 设置为null是更新属性不使用一个时间戳。默认是‘update_time’

方法详细

beforeSave() 方法
public void beforeSave(CModelEvent $event)
$eventCModelEvent事件参数
源码: framework/zii/behaviors/CTimestampBehavior.php#87 (显示) publicfunctionbeforeSave($event){
if($this->getOwner()->getIsNewRecord()&&($this->createAttribute!==null)){
$this->getOwner()->{$this->createAttribute}=$this->getTimestampByAttribute($this->createAttribute);
}
if((!$this->getOwner()->getIsNewRecord()||$this->setUpdateOnCreate)&&($this->updateAttribute!==null)){
$this->getOwner()->{$this->updateAttribute}=$this->getTimestampByAttribute($this->updateAttribute);
}
}

响应CModel::onBeforeSave事件。 设置创建或修改的属性值的配置

getTimestampByAttribute() 方法
protected mixed getTimestampByAttribute(string $attribute)
$attributestring$attribute
{return}mixed时间戳(例如,unix时间戳或者一个mysql函数)
源码: framework/zii/behaviors/CTimestampBehavior.php#102 (显示) protectedfunctiongetTimestampByAttribute($attribute){
if($this->timestampExpressioninstanceofCDbExpression)
return$this->timestampExpression;
elseif($this->timestampExpression!==null)
return@eval('return'.$this->timestampExpression.';');

$columnType=$this->getOwner()->getTableSchema()->getColumn($attribute)->dbType;
return$this->getTimestampByColumnType($columnType);
}

获得合适的时间戳取决于列类型$attribute

getTimestampByColumnType() 方法
protected mixed getTimestampByColumnType(string $columnType)
$columnTypestring$columnType
{return}mixed时间戳(例如,unix时间戳或者一个mysql函数)
源码: framework/zii/behaviors/CTimestampBehavior.php#118 (显示) protectedfunctiongetTimestampByColumnType($columnType){
returnisset(self::$map[$columnType])?newCDbExpression(self::$map[$columnType]):time();
}

返回合适的时间戳取决于$columnType