YII 프레임워크 분석 노트 4:ar모델과db

YII에서 두 가지 유형의 모델을 실현하는데 그것이 바로 표 모델과 활동 기록이다.영구화된 데이터에 있어 YII는 활동 기록만 실현했고 복잡한 데이터 관계에 대해 프레임워크가 제공하는 DAO로 모델을 직접 쓸 수 있으며 doctrine과 같은 ORM을 통합하는 것에 대해 자세히 연구한 적이 없다.
A모델 프레임워크의 모델은 CModel 하위 클래스이고 CModel은 주로 검증과 오류 처리를 하고 교체기와 그룹 접근 인터페이스를 실현한다. 활동 기록 모델인 CActive Record는 AR 모델의 기본 클래스이다.모든 AR 클래스는 하나의 단독 데이터 테이블을 대표하고, 하나의 AR 실례는 그 테이블의 한 줄을 대표한다.AR은 데이터의 지속성을 책임지는 ORM(Object Relation Mapping) 설계 모델입니다.데이터베이스 CURD 작업을 캡슐화하는 동시에 영역 모델(Domain Model)으로 일부 비즈니스 논리를 캡슐화합니다.테이블 구조(Table Schema), 구속조건 및 CURD가 포함된 AR 클래스
실례화 모델은 두 가지 방법이 있는데 바로 new의 새로운 실례를 사용하거나 정적 방법 mode()를 사용한다. 후자와 전자의 차이는 구조 함수가 실행하는 코드(주로 원 데이터의 여러 번 가져오는 것을 피한다)를 생략하고 정적 방법 mode()로 AR 대상을 만드는 절차를 거친다.
//$model::model($class)
$model=self::$_models[$className]=new $className(null);//    mode   
new CActiveRecordMetaData($model)//      
//1、       
$model->getDbConnection() //       
->getSchema()//     schema
->getTable($tableName)//   shema
->loadTable()//     
->findColumns()//              
->findConstraints()//     (          )
//2、    
//3、    (    BELONGS_TO、HAS_ONE、HAS_MANY、MANY_MANY、STAT)
$model->attachBehaviors($model->behaviors());//    
위 절차에서 문제가 발생할 수 있습니다. 모델을 만들 때마다'SHOW COLUMNS FROM $tableName'과'SHOW CREATE TABLE $tableName'의 검색을 실행하는데 높은 성능과 성능에 영향을 줄 수 있습니다.주 설정 파일의 데이터베이스 설정에 schemaCaching Duration과 schemaCacheID의 설정을 추가하여 데이터베이스 schema를 캐시할 수 있습니다. 전자는 캐시를 설정하는 시간이고 후자는 캐시 구성 요소의 id입니다. 그러나 캐시가 가져오는 문제는 데이터베이스 테이블 구조를 수정하는 것이 즉각 효력이 발생하지 않기 때문에 생산 환경에서 캐시를 새로 고치는 스크립트를 쓰는 것이 필요합니다.
AO ar모델이 가져온 장점은 개발 중인 SQL 문장의 작성을 최소화하는 것이다. AR모델은 데이터베이스 기록의 상태와 데이터베이스에 대한 접근 방법을 봉인할 뿐만 아니라 업무 논리도 봉인한다. 이것은 관계가 복잡하지 않은 응용에서 가져오는 장점이 뚜렷하다. 그러나 데이터베이스 관계가 복잡하고 업무 논리가 복잡하면 데이터에 대한 조작을 단독으로 제기할 필요가 있다.YII의 DAO는 업무 논리와 데이터 교환을 분리하고 업무와 데이터베이스의 결합성을 낮춘다.YII에서 DAO는 PDO를 기반으로 하여 통일된 인터페이스로 서로 다른 데이터베이스 관리 시스템에 접근할 수 있다.프레임워크에서 CDbConnection, CDbCommand, CdbDataReader, CDbTransaction 클래스는 각각 데이터 양의 연결, 명령, 읽기와 업무를 관리한다.
YII는 데이터베이스에 대한 schema를 비추기도 한다. 하나의 데이터베이스는 하나의 대상이고 하나의 표는 하나의 대상이며 한 열은 하나의 대상에 대응한다. 이런 대상은 각각 그에 대응하는 schema의 일부 조작을 봉인한다.

좋은 웹페이지 즐겨찾기