2009
01.13

CakePHP 使用不同 Data Source 的方法

在 CakePHP 中,常常都是用單一資料庫當作資料來源。不過去年我遇到了一個問題,就是我必須新增其他的資料來源(也就是存取不同的資料庫),但是這個問題,一直無解,直到今天晚上狂翻線上文件才發知道解決的辦法(居然這麼簡單)…

如果有不同 DAO 要切換的話,必須這樣做:

    var $default = array('driver' => 'mysql',
        'host' => '127.0.0.1',
        'login' => 'cakephpuser',
        'password' => '',
        'database' => 'mysql_project');

    var $alternate = array('driver' => 'mssql',
        'host' => '127.0.0.2',
        'persistent' => true,
        'login' => 'cakephpuser',
        'password' => '',
        'database' => 'mssql_project',
        'port' => '1443',
        'encoding' = > 'utf8',
        'prefix' => '');
        /* 在 DB config 中新增一組連線叫做 alternate 連接到 127.0.0.2 的 MSSQL 資料庫 */

在某個要使用該資料庫的 Model 中宣告:

class Example extends AppModel {
    var $useDbConfig = 'alternate'; /* 使用 DB 設定檔中的 $alternate 連線設定 */
    var $name = 'Example'; /* 在 Controller 被叫用的名字,如不設定則依內定命名規則對應命名 */
    var $useTable = 'members'; /* 使用 members 資料表,如不設定則依內定命名規則找資料表 */
    var $tablePrefix = 'alternate_'; /* 資料表前面的 prefix 字串 */
    var $primaryKey = 'example_id'; /* 預設命名規則使用 id 當主鍵,如果使用別的欄位名稱當主鍵則需特別指定 */
}

而是 Controller 內的使用方法則不變(這邊就不用講了):

    $this->Example->find('all');

更詳細的用法請見: Model Attributes

No Comment.

Add Your Comment
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>