ZF partialLoop ile bir-çok ilişkisi Taşıma

1 Cevap php

Ben her sanatçının ismi, bir sanatçı tabloda saklanan Yaş vs gibi temel bilgiler, müzik sanatçıları sayıyorum diyelim. Onlar da bir yabancı anahtar olarak sanatçı kimliğini kullanarak sanatçı tabloya başvuran bir Albümler tablosundaki girdileri (albüm adı / albüm kapağı vs) var.

Ben Model_Artist (Artist.php) dosyası vardır:

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);
    }
}

ve Model_ArtistAlbums (ArtistAlbums.php) dosyası

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
}

benim denetleyicisi:

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();
}

view dosyasında:

$this->partial()->setObjectKey('artist');
echo $this->partialLoop('admin/list-artists.phtml', $this->artists);

ama sanatçı / list-artists.phtml bu kodu:

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

ben bu hatayı alıyorum:

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

A var_dump ve $this->artist = NULL.

1 Cevap

Eğer görünümü çağrısında:

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

Not - i artist daha genel bir şey almak ya da daha sonra aynı başka bir şey için partialLoop kullanırsanız sıfırlamak hatırlamak isteyebilirsiniz böylece bu partialLoop yardımcısı örneği için küresel nesne anahtarını değiştirir inanmak görünümü.

ve kısmi olarak:

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

Gerçek argüman (lar) findDependentRowset sizin projeler modeli adlandırma kuralları açısından olmalıdır ne için Zend_Db_Table_Row için docs / API edin. Ayrıca zaten _referenceMap tanımlı sığınak eğer tablo sınıfta bazı şeyleri ayarlamak gerekebilir.