2010-06-04 42 views
1

例子:可能在Zend_Db_Select上使用_referenceMap和join()?

class Products extends Zend_Db_Table_Abstract 
{ 
    protected $_name = 'products'; 

    protected $_referenceMap = array(
     'Bug' => array(
      'columns'   => array('bug_id'), 
      'refTableClass'  => 'Bugs', 
      'refColumns'  => array('bug_id') 
     ) 
    ); 

} 

$object = new Products(); 

$select = $object->select()->from()->Join('Bug'); 

而不是定義完整的連接語句

+0

大:)只是賺風滾草徽章! – Phliplip 2010-06-12 19:50:26

+0

我正在尋找這個答案,或者使用$ _referenceMap – gawpertron 2010-09-15 15:12:25

回答

1

至於我可以告訴$ _referenceMap不以這種方式使用。 $ _referenceMap定義了表格行與其他表格的關係。

這就是爲什麼在Zend_db_Table_Row_Abstract中找到關聯的findDependentRowset(),findManyToManyRowset()和findParentRow()。這些方法創建聯接。

因此,要使用select對象從Bugs獲取相關行,您應該這樣做,假設Products與Bugs具有一對多關係;

class Products extends Zend_Db_Table_Abstract 
{ 
    protected $_name    = 'products'; 
    protected $_dependentTables = array('Bugs'); 
} 

class Bugs extends Zend_Db_Table_Abstract 
{ 
    protected $_referenceMap = array(
     'Products' => array(
      'columns'   => array('bug_id') 
      ,'refTableClass'  => 'Products' 
      ,'refColumns'  => array('bug_id') 
     ) 
    ); 
} 

要獲得相關行,您首先必須獲取父行。

$products = new Products(); 

$productRow = $products->find(123) 
         ->current(); 

您可以優化使用Zend_Db_Select對象

$select = $products->select() 
        ->where('foo_bar = ?', 'cheese') 
        ->limit(2); 

最終通過在選擇對象,而不是代替規則鍵查詢相關的行加入。

$bugRowset = $productRow->findDependentRowset('Bugs', 'Products', $select); 

我覺得這樣會起作用的,明天早上我會去查。

+0

做類似的事情你是對的,發現這個我的自我也:) – Phliplip 2010-09-19 13:44:36

1

這對於一行是有用的,但對整個表格(或多行)沒有用處。我通常需要影響多行的查詢... Zend公司應落實Phliplip提到的選項,或類似的東西:

$select = $object->select()->from()->Join('Bug'); 

注:我的意思是,只使用一個查詢