Yii의 AR 단일 행 데이터 자동 캐시 메커니즘
8157 단어 yii
CActiveRecord
CActiveRecordBehavior
cache
Active Record
Active Record(AR)는 ORM(관계 매핑) 기술이 유행하는 객체입니다.Yii DAO는 거의 모든 데이터베이스와 관련된 작업을 처리할 수 있지만, 일부 기본적인 CRUD에 대해서는 YII가Active Record를 사용하는 것을 추천합니다.
CActiveRecord는 하위 클래스에서 덮어쓰여 워크플로우를 사용자 정의할 수 있는 몇 가지 자리 표시자 방법을 제공합니다.
beforeValidate와 afterValidate: 동작이 트리거된 AJAX 기반 검증이 실행되기 전과 이후에 호출된 함수를 폼에서 제출합니다. (validate OnSubmit가true로 설정되었을 때만 사용할 수 있습니다.)
beforeSave와 afterSave: 이 두 개는 AR 인스턴스를 저장하기 전과 후에 호출됩니다.
before Delete와 after Delete: 이 두 개는 AR 실례가 삭제되기 전과 이후에 호출됩니다.
afterConstruct: 이것은 new 조작부호를 사용하여 AR 실례를 만든 후에 호출됩니다.
beforeFind: 이것은 AR 검색기가 검색을 실행하는 데 사용되기 전에 (예:find (),findAll ())) 호출됩니다.1.0.9 릴리즈를 사용할 수 있게 되었습니다.
afterFind: 각 AR 인스턴스가 질의 결과로 작성될 때 호출됩니다.
캐시
캐시는 웹 사이트의 성능을 향상시키는 데 사용되는 간단하면서도 효과적인 방법이다.필요한 경우 상대적으로 정적 데이터를 캐시에 저장하여 데이터를 생성하는 시간을 줄일 수 있습니다.
구현 코드
YiicmsActiveRecord.php는 CActiveRecord를 상속합니다.php
/**
* Base class for all active records
* @author biner
* @since 1.1
* @package Yiicms.log
*
*/
abstract class YiicmsActiveRecord extends CActiveRecord
{
public function behaviors()
{
return array(
// YII AR
'YiicmsActiveRecordBehavior'
);
}
/**
* model
*/
public function getModelClass()
{
$modelclass = get_class($this);
return $modelclass;
}
/**
*
*/
public function getCacheKey($pk = '')
{
$modelclass = $this->getModelClass();
$model_pk = $this->getPrimaryKey();
$pk = $model_pk?$model_pk:$pk;
$key = 'resource_'.$modelclass.'_'.$pk;
//var_dump($key);die;
return $key;
}
/**
* findByPk , ,
* YiicmsActiveRecordBehavior ,
*/
public function findByPk($pk,$condition='',$params=array())
{
$key = $this->getCacheKey($pk);
//Yii::app()->cache->delete($key);
$resource=Yii::app()->cache->get($key);
if($resource===false)
{
$resource=parent::findByPk($pk,$condition,$params);
Yii::app()->cache->set($key,$resource);
// , $value
//
// Yii::app()->cache->set($id,$value);
}
return $resource;
}
}
YiicmsActiveRecordBehavior.php 상속CActiveRecordBehavior 클래스
/**
* Base class for all active records
* @author biner
* @since 1.1
* @package Yiicms.log
*
*/
class YiicmsActiveRecordBehavior extends CActiveRecordBehavior
{
private $_oldattributes = array();
public function beforeSave($event)
{
//
$key = $this->Owner->getCacheKey();
Yii::app()->cache->delete($key);
$attributes = $this->Owner->getAttributes();
$this->setOldAttributes($attributes);
}
}
Product.php 상속 YiicmsActiveRecord
/**
* AR YiicmsActiveRecord
*
*/
class Product extends YiicmsActiveRecord
{
//......
//.....
}
From: http://www.yiibase.com/yii/view/172.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LimeSurvey HelloWorld 플러그인LimeSurvey 내의 명령줄에서 간단한 명령을 실행하려면 다음 코드가 필요합니다.upload/plugins 아래의 폴더 구조는 다음과 같아야 합니다. 헬로월드 config.xml HelloWorld.php Lim...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.