2013-04-17 25 views
1

我對Zend很新,並且與Zend Select抽象一起去了。當嘗試創建一個查詢從另一個模式中加入另一個表時,我遇到了一些問題。Zend 2.1:是否有可能通過Db> Sql>選擇多模式連接

MySQL查詢我想製作的是:

SELECT * FROM `assets` 
JOIN `projects` 
ON `assets`.project_id = `projects`.id 
JOIN `secondSchema`.`users` AS `users` 
ON `users`.id = `projects`.user_id 
WHERE `projects`.id = ? 
AND `users`.id = ? 

與Zend/DB/SQL/SQL的工作/選擇我可以設置以下選擇建設者,但我在設置另一個模式掙扎產生的SQL語句:

$select = $this->_sqlBuilder->select(); 
    $select->from('assets'); 
    $select->join(
     'projects', 
     'projects.id = assets.project_id' 
    ); 
    $select->join(
     'users', 
     'users.id = projects.user_id' 
    ); 
    $select->where->equalTo('assets.project_id', $projectID); 
    $select->where->equalTo('users.id', $userId); 

我一直在使用\ Zend的\ DB \ SQL \ TableIdentifier設置的模式,但在適配器的原始模式,然後更換審理,但看起來並不像一個辦法兼得查詢中存在的模式。

是否有無論如何使用Sql/Select來做到這一點,或者我會用Zend Db去錯誤的方式嗎?

感謝您的幫助

+0

究竟發生了什麼呢?任何錯誤? – Andrew

+0

返回的錯誤是'語句無法用sql生成',檢查返回的錯誤的問題是用戶表位於不同的模式上。所以我的問題是我需要在第二次連接中添加額外的模式。希望這可能不訴諸原始的SQL – tomo661

+0

看起來是類似於這個問題 - > http://stackoverflow.com/questions/15830774/zf2-make-a-join-between-two-different-databases和缺乏回答以外的不可能的建議原始的SQL是要走的路 – Crisp

回答

0

由於Select類轉義引號的方式而發生此問題。

$選擇 - >加入( 「database2.table2」, 「database2.table2.id = table.id」)

呈現爲:

選擇 '表' *「DATABASE2。表2' 。* FROM '表' INNER JOIN 'database2.table2' ON 'DATABASE2'。 '表2'。 '身份證'= '表'。 '身份證'

注意不一致的和不正確的圍繞「DATABASE2報價.table2" 。

更新\ Zend \ Db \ Sql \ Select中的第596,599,624,625行以用「quoteIdentifierInFragment」替換「quoteIdentifier」方法正確呈現查詢並允許執行跨數據庫聯接。

我已經向Zend提交了一個問題報告,因爲我不相信目前的行爲是希望在將來的版本中更新。現在,它很容易(雖然承認有點骯髒)手動更新類。

https://github.com/zendframework/zf2/issues/4307

+0

不錯的修復,雖然編輯核心zend php將意味着未來不會輕鬆更新,但修復很有效。這可能是Zend可能想要解決的一個疏忽,很好的將它標記給他們。 – tomo661

相關問題