2010-03-31 6 views
1
내가의 조인 대신 젠드 DB 행 집합의 추상화를 사용하는 방법에 대한 궁금

이며, 그것은 내가젠드 DD 행 집합 점점 상위 행

/** 
* Get default photo info (path , description) 
*/ 
public function getDefaultPhotoInfo($userdId){ 

    $select = $this->select($this) 
      ->where('id=?', $userdId); 
    $rowset = $this->fetchAll($select); 
    $current = $rowset->current(); 

    $res = $current->findParentRow('UserPhotos', 'Avatar'); 
    if(isset($res)){ 
     return $res->toArray(); 
    } 
} 

여기에서와 같이 부모 테이블에서 일부 정보를 얻을 수 있어요 예를 들어 수 어떻게이 LANG_ID를 지정하는 두 테이블에서 정보를 얻기 위해 위의 두 테이블의 표현이

table(id, pic_path,) table_translation(id, table_id, lang_id, pic_title); 

작업이 논리를 얻기 위해 행 집합 추상화, 아이디어입니다 사용할 수 있습니다, 그것은 조인 간단하지만 난 그것을 할 수 있습니다 Db 행 집합의 추상화와 함께?

답변

1

Zend_Db_Table 인스턴스에서 fetchAll을 수행하면 Iterator 인터페이스를 구현하는 Zend_Db_Table_Rowset이됩니다. 따라서 행 집합 인스턴스에서 current()을 호출하면 Zend_Db_Table_Row 인스턴스가 반환됩니다.

ZF1.10부터 Zend_Db_Table_Defintion 인스턴스 또는 reference guide for Zend_Db_Table Relationships에 설명 된 것처럼 구체적인 테이블 인스턴스에있는 테이블 간의 관계를 정의합니다. 가이드가 상세하기 때문에 여기에서 이것을 재현하지 않을 것입니다. 당신이 관계를 정의하면

, 당신은 (가이드에서 예 1)

$accountsTable = new Accounts(); 
    $accountsRowset = $accountsTable->find(1234); 
    $user1234 = $accountsRowset->current();  
    $bugsReportedByUser = $user1234->findDependentRowset('Bugs'); 

또는 마법 파인더 방법으로 행에서 그들을 가져올 수 있습니다.

findParentRow() 메서드는 부모 행에서 종속 행 집합의 전체 행을 반환하기 때문에 다소 다릅니다.

EX5 :이 예에서는 테이블 버그 (상태 'NEW'와 그 버그의 예를 들어 하나)에서 행 객체를 얻고, 그리고 버그를보고 사용자에 대한 계정 테이블의 행을 찾아 보여줍니다. A는 하나에 모든 것을 수행에 참여하는 반면

$bugsTable = new Bugs(); 
    $bugsRowset = $bugsTable->fetchAll(array('bug_status = ?' => 'NEW')); 
    $bug1 = $bugsRowset->current(); 
    $reporter = $bug1->findParentRow('Accounts'); 

테이블 관계를 사용하여,이 가져올 종속 테이블 당 하나 개의 추가 쿼리가 발생할 것이라는 점을 명심하십시오.

항목이 관련 질문 :