2013-01-24 103 views
0

如何與另一個選擇對象建立聯接?我需要這樣的查詢Zend Framework 2 Zend Db 選擇如何加入另一個選擇

$select->join(array('alias' => $subSelect), 'on clause', 'array('*'), 'left'); 

這樣的事情在ZF1.x中是可行的。

在ZF2連接方法的第一個參數是名稱的表或具有別名的數組,但我不能在那裏\選擇。即使我放在這裏

$select->getSqlString($this->adapter->platform); 

字符串被引用,並且查詢無效。加入也不會添加括號。這真是令人困惑。

回答

1

也許這會幫助你。這是一個工作的例子,我有我的TableGateway:

public function Profile($params) 
{ 
    $result = $this->select(function (Select $select) use ($params) { 
     $select 
      ->columns(array(
       'ipaddress_type', 
       'ipaddress', 
       'domain' 
      )) 
      ->join('product_hosting_profile', 'product_hosting_profile.productid = webaccount.productid', array(
       'servers', 
       'services' 
      )) 
      ->where(array(
       $this->adapter->getPlatform()->quoteIdentifierChain(array('webaccount', 'accountid')) . ' = ' . $this->adapter->getPlatform()->quoteValue($params['accountid']), 
       $this->adapter->getPlatform()->quoteIdentifierChain(array('webaccount', 'productid')) . ' = ' . $this->adapter->getPlatform()->quoteValue($params['productid']), 
       $this->adapter->getPlatform()->quoteIdentifierChain(array('webaccount', 'webaccountid')). ' = ' . $this->adapter->getPlatform()->quoteValue($params['webaccountid']) 
      )) 
      ->limit(1); 
    }); 

    return $result->current(); 
} 
0
$subSelect=new Select(array('A'=>new TableIdentifier('target','CAT'))); 
    $subSelect->columns(array('fk_w','TI'=>'id','mtarget_f'=>new Expression('sum(F)'), 
       'mcost'=>new Expression('round(sum(F*D.mcost),2)'))) 
    ->join(array('B'=>new TableIdentifier('item','CAT')),'B.id=A.fk_w', 
      array()) 
        ->join(array('D'=>new TableIdentifier('rate','CAT')),'A.dat=D.year and D.fk_c=B.CCODE and D.fk_b=A.fk_b', 
          array()) 
          ->where->equalTo('Year', $year); 



    $select=new Select(array('A'=>new TableIdentifier('item','CAT'))); 
    $select->columns(array('WID'=>'id','AID'=>'AID', 
       'item'=>'ITEM_ID','Wtitle'=>'WTITLE')) 
    ->join(array('B'=>new TableIdentifier('cn','CAT')),'B.id=A.CCODE', 
      array('Ct'=>'name')) 
    ->join(array('S'=>$subSelect),'S.fk_w=A.id',array('Mtarget'=>'mcost', 
        'MTarget'=>'m_target',     
        'TID'),'left');