2013-03-07 58 views
-1

目前我正在進行一些與模型相關的改進,並正在研究我寫的特定查詢。Zend_Db魔術方法特定單元格選擇

$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

'findModule_Model_ModulePagesPrintsViaModule_Model_ModulePagesFuses'是最惡劣的函數名到目前爲止,我已經看到了:d – mingos 2013-03-07 12:09:37

+0

@mingos:我真的不關心你所看到的。我試圖修復這裏的一些錯誤... – wpoortman 2013-03-07 12:14:37

+3

哦,一個態度問問者! 「我不在乎你所看到的,給我我的答案,我想要它」。很好,男人,真好。我只是在調查這個問題,並打算爲您提供解決方案,但我剛剛改變了主意。 – mingos 2013-03-07 12:26:13

回答

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']); 
+0

的確,我並不是那種「愚蠢」的狂熱粉絲。我已經嘗試了幾乎完全相同的查詢,但它有點骯髒(即使你不喜歡我的函數名稱= D)。我會深入探討這一點。我現在把話題保持開放。謝謝 – wpoortman 2013-03-07 14:15:37

+1

它可能看起來很髒,或者,但我個人認爲它實際上比由lng類名組成的神祕函數名更具可讀性。另外,避免使用'__call'和其他魔術方法使得IDE更加清楚你正在做什麼(代碼完成,返回類型檢查,正確性檢查)。至少這是我個人的看法。 – mingos 2013-03-07 14:35:12