2016-04-19 17 views
1

Zend Framework 2では、異なるデータベーステーブルを結合するときに、間違ったエスケープを避けるために\Zend\Db\Sql\TableIdentifierクラスを使用する必要があります。Zend Framework 2 - 異なるデータベースとスキーマのテーブルを結合する

私は、このようにしない場合:これは私が行うことができます。このような状況を解決するために"database2.table2"

を引用し、誤っが発生し

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

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

次のようにレンダリングされます

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

このようにすれば、引用は正しいです。"database2"."table2"

しかし、データベースとスキーマを指定する必要がある場合はどうすればよいですか? (MS SQLサーバで例えば)

所望の結果は、スキーマはあなたのZend \ Dbの\アダプタ\アダプタ( 'データベース' => 'のSchemaName')で指定され"database2"."dbo"."table2"

答えて

0

あります。私はあなたがクエリでスキーマを変更することはできないと思う。別のアダプタを使用する必要があります。

+0

でそれを使用する必要が答えてくれてありがとうしかし、私は2つの異なるアダプタから2つのテーブルを結合することはできません知っているものから、または私が間違っていますか? – corros

0

これは私のために働いた。また、あなたのために働く必要があります。あなたはtableGateway

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; 
関連する問題