2009-11-24 18 views
4

是否有可能某些型號是在一個數據庫中,而在另一個其他車型(使用相同的連接)呢?CakePHP的使用多種數據庫模式

我有一個數字,我想我的系統的多個安裝之間共享只讀表。其他表格需要進行安裝。例如起見,假設users是共享表,posts是每安裝。在一個模式中(我們稱之爲「共享」),我們有users表,而在另一個模式(「mycake」)中,我們有posts

我已經能夠通過創建指向共享數據庫的新數據庫連接從另一個數據庫讀取用戶模型(儘管兩個數據庫位於同一主機上,並且都可以使用相同的登錄詳細信息訪問)。

class User extends AppModel { 
    var $useDBConfig = 'sharedConnection'; 
} 

的問題是,當談到時間加入到posts表。它不會將模式名稱預先添加到表名中,因此它找不到posts

// what it does 
SELECT * FROM users User INNER JOIN posts Post ... 

// what I'd like it to do: 
SELECT * FROM shared.users User INNER JOIN mycake.posts Post ... 

所以基本上,是有一個完全合格的表名分配給一個模型,並迫使它使用的所有查詢的方法嗎?設置var $useTable = 'shared.users';沒有幫助...

+0

答案這是一個很好的問題。當選擇一個框架(在PHP中)時,我總是檢查框架是否允許這樣做。 – wenbert 2009-11-24 05:52:42

回答

1

This site有辦法做到這一點,但它有點哈克。

+0

heh - 「小」是有點輕描淡寫。無論如何,我會給它一個鏡頭。 – nickf 2009-11-24 06:17:43

+0

這有點過時了,但是我可以一起破解它以使其正常工作。 – nickf 2009-11-24 07:12:30

+0

很好聽=) – Galen 2009-11-24 16:56:51

1

我已經建立在CakePHP的一個網站,有使用不同的數據庫模型,並在不同的數據庫連接我從未有過的問題 - 框架似乎照顧的一切對我來說。儘管您可能需要明確聲明模型中使用的數據庫表以使其工作。

+0

你是怎麼做到的? – nickf 2009-11-24 14:52:06

+1

我只是爲每個數據庫使用不同的登錄細節。從記憶中分享登錄時出現問題。 – 2009-11-27 08:42:51

0

要切換的數據庫模型,

使用的命名空間中的控制器/模型

use Cake\Datasource\ConnectionManager; 

在控制器; -

$conn = ConnectionManager::get('remote_db_1'); 
$this->ModelName->connection($conn); 

在模型: -

$conn = ConnectionManager::get('remote_db_1'); 
$this->connection($conn); 

注意: - 如果您也要保存關聯表的數據,請記住 以更改關聯數據的DB,否則關聯表的數據將插入到默認連接/數據庫中。

這是CakePHP的3 *