1

音楽アーティストをリストしているとしましょう。各アーティストには、名前、年齢などの基本情報がアーティストテーブルに保存されています。また、アルバム テーブル (アルバム名/アルバム カバーなど) にもエントリがあり、アーティスト ID を外部キーとして使用してアーティスト テーブルを参照します。

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

ビューファイルで:

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

ただし、artists/list-artists.phtml の次のコードでは:

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

私はこのエラーが発生します:

致命的なエラー: オブジェクト以外でのメンバー関数 findDependentRowset() の呼び出し

=のA。var_dump_$this->artistNULL

4

1 に答える 1

4

あなたの呼び出しビューで:

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

注 - これにより、partialLoop ヘルパーのインスタンスのオブジェクト キーがグローバルに変更artistされると思われるため、後で同じビューで別の何かに partialLoop を使用する場合は、より一般的なものを選択するか、リセットすることを忘れないでください。

そしてあなたの部分的に:

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

Zend_Db_Table_Row の docs/apifindDependentRowsetで、プロジェクトのモデルの命名規則に関して実際の引数がどうあるべきかを確認してください。をまだ定義していない場合は、テーブル クラスにいくつか設定する必要がある場合もあります_referenceMap

于 2010-01-20T16:16:08.183 に答える