1

私は_referenceMapを介して関係を定義できることを知っています、私は参加してトラフを選択することを知っています

$db->select()

しかし、私が必要としているのは、モデル拡張Zend_Db_Table_Abstractで行セットをフェッチしてから、別のテーブルから参照されている列の値で並べ替えることです。

それを行うための回避策はありますか?

編集:

ここに例があります:

最初のテーブル:

テーブルバグIDバグ名作成者ID

2番目のテーブル:

テーブル作成者列ID作成者名

私はモデルを持っていますModel_Bugs extends Zend_Db_Table_Abstract

私はこのようなものを作りたいです:

$model->fetchAll($model->select()->order('authorname ASC'))

つまり、テーブルを結合し、モデルテーブルにない列で並べ替える必要があります。

手伝ってくれてありがとう

1月

4

1 に答える 1

0

Model_Bugs次のようにメソッドを追加します。

public function fetchBugsByAuthorname() {

    $bugTable = $this;
    $bugTableName = $this->info('name');
    $authorsTable = new Model_Authors();
    $authorsTableName = $authorsTable->info('name');

    $select = $bugTable->select()
        ->setIntegrityCheck(false)
        ->from($bugTable, array('id', 'bugname', 'authorid'))
        ->join($authorsTableName, 
            "$bugTableName.authorid = $authorsTableName.id", 
            array("authorname"))
        ->order("$authorsTableName.authorname asc");
    $result = $bugTable->fetchAll($select);

    return $result;
}

ただし、これを行うには、ZF のテーブル整合性チェック (上記) をオフにする必要があります。つまり、結果の行setIntegrityCheck(false)を直接呼び出すことができなくなります。save()ただし、読み取り専用の場合は機能します。

行セットをデータベースに保存する必要がある場合は、最初に作成者 ID を必要な順序で選択し、それに応じてクエリModel_Authorsの順序を変更する必要がある場合があります。Model_Bugs面倒ですが、機能します。

于 2011-07-12T23:46:56.353 に答える