2010-01-20 2 views
1

음악 아티스트를 나열하려고합니다. 각 아티스트는 이름, 나이 등 아티스트 테이블에 저장된 기본 정보를 가지고 있습니다. 또한 앨범 테이블 (앨범 이름/앨범 표지 등)에 아티스트 ID를 외래 키로 사용하여 아티스트 테이블을 참조하는 항목이 있습니다.ZF partialLoop과 일대 다 관계 처리

나는 Model_Artist (Artist.php) 파일이 있습니다

class Model_Artist extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'artist'; 
    protected $_dependentTables = array('Model_ArtistAlbums'); 
    public function fetchArtistss() 
    { 
     $select = $this->select(); 
     return $this->fetchAll($select); 
    } 
} 

과 Model_ArtistAlbums에

(ArtistAlbums.php) 내 컨트롤러에

class Model_ArtistAlbums extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'albums'; 

    protected $_referenceMap = array(
     'Artists' => array(
      'columns'  => 'alb_art_id', 
      'refTableClass' => 'Model_Artist', 
      'refColumns' => 'art_id' 
     ) 
    ); 
    // etc 
} 

파일 :

public function indexAction() 
{ 
    /* THIS WORKS 
    $art = new Model_Artist(); 
    $artRowset = $art->find(1); 
    $art1 = $artRowset->current(); 
    $artalbums = $art1->findDependentRowset('Model_ArtistAlbums'); 
    foreach($artalbums as $album){ 
     echo $album->alb_title."<br>"; 
    } 
    */ 
    $arts = new Model_Artist(); 
    $this->view->artists = $arts->fetchArtists(); 
} 

을 보기 파일의 내용 :

하지만 예술가 /리스트 artists.phtml에서이 코드:

foreach($this->artist->findDependentRowset('albums') as $album): 
// other stuff 
endforeach; 

내가이 오류를 얻을 : $this->artist = NULL

Fatal error: Call to a member function findDependentRowset() on a non-object

var_dump. - 난 당신이 artist보다 더 일반적인 뭔가를 선택하거나 경우를 다시 기억 할 수 있습니다 있도록이가 partialLoop 도우미의 인스턴스에 대해 전역 객체의 키를 변경 믿습니다

<?php $this->partialLoop()->setObjectKey('artist'); ?> 
<?php echo $this->partialLoop('yourpartial.phtml', $artists); ?> 

참고 :보기 전화에서

답변

4

나중에 동일한 뷰에서 partialLoop을 사용합니다.

당신의 부분에

:

<?php foreach($this->artist->findDependentRowSet('Albums') as $album): ?> 
<!-- looping stuff here --> 
<?php endforeach; ?> 

확인 findDependentRowset의 실제 인수 (들) 프로젝트의 모델 명명 규칙의 관점에서해야 무엇을위한 Zend_Db_Table_Row에 대한 문서/API. _referenceMap을 이미 정의하지 않은 경우 테이블 클래스에서 일부 설정을해야 할 수도 있습니다.

+0

감사합니다.이 오류가 발생하는 순간에 – robjmills

+0

이상한 메시지가 표시됩니다. "메시지 : 'FindDependentRowset'이라는 이름의 플러그인이 레지스트리에서 찾을 수 없습니다." – robjmills

+0

오케이 $이 뷰 인스턴스를 참조해야합니다. 내 부분에 큰 "duh"는 편집을 참조하십시오. – prodigitalson