Zend_Db魔法特定的细胞选择

时间:2013-03-07 10:24:13

标签: zend-framework relationship zend-db-select

目前,我正在处理一些与模型相关的改进,并研究了我写过的具体问题。

$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']) )
    }                                                       
}

问题在于从相关表请求数据的魔术方法。我只需要'标题'每行一个单元格,但由于某种原因它不会让我。即使使用此查询,它也会返回该行中的所有单元格。我做错了什么,但不知道是什么!

如果有人能指出我正确的方向,我会非常感激。

祝你好运!

1 个答案:

答案 0 :(得分: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']);