2013-12-13 35 views
0

得到的數據,如果我用Zend框架的兩個表中

$query = $this 
     ->select() 
     ->from(array('a' => 'aanvragen')) 
     ->join(array('v' => 'verloven'), 
        'v.aanvraag_id = a.id' ,array()) 
     ->where('a.personeelslid_id = :personeelslid_id') 
     ->where('v.type = 3') 
     ->bind(array(
      'personeelslid_id' => $this->_personeelslid->id 
     )) 
    ; 
    return $this->fetchAll($query, array('aanvragen','verloven')); 

我得到由於array()從表verloven(v)正確record(s)但沒有數據。

但如果我刪除空數組,如:

 $query = $this 
     ->select() 
     ->from(array('a' => 'aanvragen')) 
     ->join(array('v' => 'verloven'), 
        'v.aanvraag_id = a.id') 
     ->where('a.personeelslid_id = :personeelslid_id') 
     ->where('v.type = 3') 
     ->bind(array(
      'personeelslid_id' => $this->_personeelslid->id 
     )) 
    ; 
    return $this->fetchAll($query, array('aanvragen','verloven')); 

我得到一個錯誤:

Select query cannot join with another table.

怎樣做才能讓兩個表中的數據?

回答

2

假設你使用的ZF 1+,你可以做從模型下面,

$sql=$this->select() 
      ->setIntegrityCheck(false) 
      ->from(array('a' => 'aanvragen'),array('field1','field2'))    
      ->join(array('v' => 'verloven'),'v.aanvraag_id = a.id',array('field3')) 
      ->where('a.personeelslid_id = :personeelslid_id') 
      ->where('v.type = 3') 
      ->group('fieldname') 
      ->order('fieldname');   

     $resultSet = $this->fetchAll($sql); 
     return $resultSet; 

需要setIntgrityCheck設置爲false加盟選擇查詢.. 希望這有助於..

+0

工作,謝謝! – grrt

+0

很高興幫忙,考慮[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) –

0

AFAIK,你應該差不多從不設置setIntegrityCheck(false)如果你真的需要的東西是交叉表。

要做到這一點是通過使用Zend_Db_Adapter正確的做法:

$query = $this 
     ->getAdapter() 
     ->select() 
     ->from(array('a' => 'aanvragen')) 
     ->join(array('v' => 'verloven'), 
        'v.aanvraag_id = a.id' ,array()) 
     ->where('a.personeelslid_id = :personeelslid_id') 
     ->where('v.type = 3') 
     ->bind(array(
      'personeelslid_id' => $this->_personeelslid->id 
     )) 
    ; 
    return $this->getAdapter()->fetchAll($query, array('aanvragen','verloven')); 

這背後的原因是,你使用的是什麼(asuming你的模型從Zend_Db_Table_Abstract擴展)是一個背景。意思是說,你正在告訴框架,你想使用特定的表格,而且你不關心其他表格。

如果要進行連接,應該在上下文梯形圖中進一步操作,並使用上下文(可使用getAdapter()方法獲取)。