class BaseActiveRecordClass extends CactiveRecord
const FLAG_MANAGE_BLOCKED=0; //
/* * */ public function setFlag($idBit=0,$bit=1){ $bitFlags=1<<$idBit; if($bit==0){ $this->flags=$this->flags&(~$bitFlags); }else{ $this->flags=$this->flags|$bitFlags; } $this->save(true, array('flags')); } /* * */ public function getFlag($idBit){ $flag=(int)$this->flags; $flag=$flag>>$idBit; if($flag>0) $cBits=log($flag,2); else $cBits=0; $newFlag=$flag|1; if($newFlag==$flag) return 1; else return 0; } /* * * param $flags array */ public function addFlagCriteria($flags=array()){ $criteria=$this->getDbCriteria(); if(!empty($flags)){ foreach($flags as $bit => $flag){ if(is_array($flag)){ $operator=($flag['operator'])?$flag['operator']:"and"; $check=($flag['check'])?(bool)$flag['check']:1; }else{ $operator="and"; $check=(bool)$flag; } $check=$check?"=":"<>"; $criteria->addCondition("(((t.flags>>".$bit.")|1)".$check."(t.flags>>".$bit."))", $operator); } } return $this; } /* * * */ public function noBlock(){ return $this->addFlagCriteria(array(self::FLAG_MANAGE_BLOCKED=>0)); }
$model= News::model()->findByPk($id); if($model->getFlag(News::FLAG_MANAGE_BLOCKED)){ die(" "); }
$model->setFlag(News::FLAG_MANAGE_BLOCKED, 1);
$news=News::model()->noBlock()->findAll();
Source: https://habr.com/ru/post/130427/
All Articles