-1

現在、私はいくつかのモデル関連の改善に取り組んでおり、私が書いた特定のクエリを調べています。

$queryGetPages = $this->fetchAll($this->select()
                        ->where('page_active = ?', (int) $active)
                        ->order('page_rank ASC'));

if($queryGetPages) {
     $queryGetPages = $queryGetPages->toArray();

     foreach($queryGetPages as $key => $value) {
         $queryGetPagePrint = $this->find($value['pageid'])
         ->current()
         ->findModule_Model_ModulePagesPrintsViaModule_Model_ModulePagesFuses(
                                                            $this->select()
                                                            ->from('module_pages_prints', array('print_title'))                             
                                                            ->where('fuse_locale = ?', $this->_toolbox['editor']['translation']) )
    }                                                       
}

問題は、関連するテーブルからデータを要求するマジックメソッドにあります。行ごとに「title」セルだけが必要ですが、何らかの理由でそれができません。このクエリを使用しても、行からすべてのセルが返されます。私は何か間違ったことをしていますが、何がわからないのです!

誰かが私を正しい方向に向けることができれば、私はとても感謝しています。

よろしくお願いします !

4

1 に答える 1

1

あなたのケースで暗黙的に呼び出される関数はfindManyToManyRowset()次のとおりです(Zend / Db / Table / Row / Abstract.phpで利用可能なコード、1001〜1108行目(ZF 1.12.1以降)。1070〜1072行目をご覧ください。

$select->from(array('i' => $interName), array(), $interSchema)
    ->joinInner(array('m' => $matchName), $joinCond, Zend_Db_Select::SQL_WILDCARD, $matchSchema)
    ->setIntegrityCheck(false);

つまり、呼び出された関数は呼び出しを上書きfrom()し、依存テーブルからすべての行を選択します(module_pages_fuses)。これは、動作するように設計された方法です。

代わりに、実際に「ばかげた」方法が必要なクエリを作成することをお勧めします。

$queryGetPagePrint = $this->select()
    ->from(array('p' => 'module_pages_prints'), array('print_title'))
    ->join(array('f' => 'module_pages_fuses'),'p.pageid = f.pageid',array())
    ->where('f.fuse_locale = ?', $this->_toolbox['editor']['translation'])
    ->where('p.pageid = ?', $value['pageid']);
于 2013-03-07T13:02:03.263 に答える