<?php
class BaseModel extends CActiveRecord
{
/**
* Set id,cretate_time,update_time value before save this model
*/
protected function beforeSave()
{
if($this->isNewRecord)
{
if($this->hasAttribute('id'))
{
$this->id = StringUtil::uuid();
}
if($this->hasAttribute('creator') && empty($this->creator))
{
$this->creator = Yii::app()->user->id;
}
if($this->hasAttribute('create_time'))
{
$this->create_time = new CDbExpression('NOW()');
}
}
if($this->hasAttribute('updated_time'))
{
$this->updated_time = new CDbExpression('NOW()');
}
return parent::beforeSave();
}
/**
* logic delete, set is delete cloum true if has
* @see CActiveRecord::deleteByPK()
*/
public function deleteByPK($pk,$condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteByPk()','system.model.CActiveRecord');
if($this->hasAttribute('is_delete'))
{
return $this->updateByPk($pk, array('is_delete' => Constant::DELETED), $condition, $params);
}
else
{
return parent::deleteByPK($pk, $condition, $params);
}
}
/**
* logic delete, set is delete cloum true if has
* @see CActiveRecord::deleteAll()
*/
public function deleteAll($condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteAll()','system.model.BaseModel');
if($this->hasAttribute('is_delete'))
{
return $this->updateAll(array('is_delete' => Constant::DELETED), $condition, $params);
}
else
{
return parent::deleteAll($condition, $params);
}
}
/**
* logic delete, set is delete cloum true if has
* @see CActiveRecord::deleteAllByAttributes()
*/
public function deleteAllByAttributes($attributes,$condition='',$params=array())
{
Yii::trace(get_class($this).'.deleteAllByAttributes()','system.model.BaseModel');
if($this->hasAttribute('is_delete'))
{
$builder=$this->getCommandBuilder();
$criteria=$builder->createCriteria($condition,$params);
if(is_array($attributes))
{
$columnCriteria = new CDbCriteria();
foreach ($attributes as $key => $value)
{
if($this->hasAttribute($key))
{
$columnCriteria->compare($key, $value);
}
}
$criteria->mergeWith($columnCriteria);
}
return $this->updateAll(array('is_delete' => Constant::DELETED), $criteria);
}
else
{
return parent::deleteAllByAttributes($attributes, $condition, $params);
}
}
/**
* filter deleted
* @see CActiveRecord::query()
*/
protected function query($criteria,$all=false)
{
if($this->hasAttribute('is_delete'))
{
$criteria->compare('is_delete', Constant::NOT_DELETED);
}
return parent::query($criteria,$all);
}
}
Yii CActiveRecord 逻辑删除封装
最新推荐文章于 2022-11-17 17:18:42 发布