2012-10-17 171 views
1

我使用zend框架1.12。我有以下查詢來運行。zend框架子查詢

"SELECT name,(select count(*) from org_quote_template_items where org_quote_template_items.quote_template_id = org_quote_templates.`id`) as total_line_item FROM `org_quote_templates`" 

在我的模型文件中,我是這樣創建的。以下是我的模型文件。

class default_Model_DbTable_QuoteTemplates extends Zend_Db_Table_Abstract 
{ 
    /** 
    * Name of the original db table 
    * 
    * @var string 
    */ 
    protected $_name = 'org_quote_templates'; 


    public function getAllTemplate($where){ 
     $select = $this->select();   
     $subquery = " (SELECT COUNT(*) FROM org_quote_template_items WHERE org_quote_template_items.quote_template_id = org_quote_templates.`id`)"; 

     $select->from(array($this), array('org_quote_templates.*','total_line_items' => new Zend_Db_Expr($subquery))); 

     $select = $select->where('organization_id = ?',$where['org_id']); 

     $adapter = new Zend_Paginator_Adapter_DbSelect($select); 
     $paginator = new Zend_Paginator($adapter); 
     $paginator->setItemCountPerPage(
       Zend_Registry::get('config')->paginator->general); 
     pr($adapter); 
     exit; 
    } 
} 

我在運行代碼時出現跟隨錯誤。 「異常'Zend_Db_Table_Select_Exception'帶消息'Select query can not join with another table'」

請讓我知道我該怎麼辦?

回答

4

。在你的要求時發生錯誤。你應該有:

$select = $this->select(); 
    $subquery = "(SELECT COUNT(*) FROM dtempls WHERE order_id = orders.id)"; 

    $select->from ($this, array (
     'id', 
     'total_line_items' => new Zend_Db_Expr ($subquery) 
    )); 
+0

好吧,最後我去加入表,但我的需要是,如果有可能寫子查詢,那麼它會很好。 –

+0

看到我的更新。 - – akond

+0

謝謝@akond,這個作品:)。 –

1

我認爲你必須使用setIntegrityCheck(false)來實現這一點。 Check this link

+0

我試過這一點stil得到錯誤,子查詢造成一些問題。我沒有找到任何答案如何在zend框架中的select語句中使用子查詢! –

+0

在我的情況下,它的工作:) –

0

你可以試試這個方法在Zend的

$this->select() 
->setIntegrityCheck(false) 
->from(array('oqt' => 'org_quote_templates'),array('total_line_item')) 
->joinLeft(array('oqti' => 'org_quote_template_items'), 'oqti.quote_template_id = oqt.id', array(count(*) as count))