2016-04-19 90 views
1

在Zend Framework 2中,當我想在不同的數據庫表格之間建立連接時,我必須使用\Zend\Db\Sql\TableIdentifier類別來避免不正確的轉義。Zend Framework 2 - 在不同的數據庫和模式中連接表格

如果我這樣做:

$select->join(['B' => 'database2.table2'], 'A.id = B.id'); 

它呈現爲:

SELECT [..] FROM "table" as "A" INNER JOIN "database2.table2" ON [...] 

這會導致不正確的引用"database2.table2"

爲了解決這種情況我可以這樣做:

$tbl2 = new \Zend\Db\Sql\TableIdentifier('table2', 'database2'); 
$select->join(['B' => $tbl2], 'A.id = B.id'); 

用這種方法引用是正確的"database2"."table2"

但是我該怎麼辦,如果我必須指定數據庫和架構? (例如,在MS SQL服務器)

期望的結果是"database2"."dbo"."table2"

回答

0

該架構在你的Zend \ DB \適配器\適配器( '數據庫'=> 'SCHEMANAME')指定。我認爲你不能通過查詢來改變模式。你必須拿一個不同的適配器。

+0

謝謝你的答案,但是,從我知道你不能從兩個不同的適配器連接兩張表,或者我錯了嗎? – corros

0

這對我有效。也應該爲你工作。你必須使用它與表網關

use use Zend\Db\Sql\Select; 
use Zend\Db\Sql\Where; 

$someCondition=new Where(); 
$someCondition->equalTo('columnName',$columnValue); 
//you can build $this->tableGateway from your DB adapter 
$rowset = $this->tableGateway->select(function (Select $select) use ($someCondition) { 
     $table2forInnerJoin = new \Zend\Db\Sql\TableIdentifier('table2Name', 'table2Database'); 
     $select->join(array('table2Name'=>$table2forInnerJoin),"table1Name.id = table2Name.id"); 
     $select->where($someCondition); 
}); 
return $rowset; 
相關問題