2013-07-24 63 views
0

我需要將表移動到另一個數據庫。Cakephp在多個數據庫上使用belongsTo

如果我這樣做,所有HABTM關係都可以通過使用像this這樣的教程正常工作。

但是在其他模型中存在belongsTo和hasMany關係,這些關係在find()函數中似乎被忽略。

我發現:

if databases for model is different the join build is bypassed. in source_dbo

有沒有深入到代碼中的任何光滑的解決方法嗎?

表:A,B上DB1 表:上DB2Ç

表:一個屬於關聯Ç 表:乙HABTMÇ

創建對模型a,查找(),則返回從表中只有數據A. 在模型B上,find()返回表B和表C中所有連接的數據。

回答

0

不確定爲什麼這是默認禁用/限制(希望能在我繼續開發此產品時發現),但是在掙扎之後這幾個小時,我決定搞亂/ lib /cake/Model/DataSource/DboSoure.php類並刪除了限制。

//<-- commented out line 1064 
//if ($model->useDbConfig === $linkModel->useDbConfig) { 

    if ($bypass) { 
      $assocData['fields'] = false; 
    } 
    if ($this->generateAssociationQuery($model, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null) === true) { 
      $linkedModels[$type . '/' . $assoc] = true; 
    } 

//} <-- commented out line 1071 

之後,一切工作正常的$ belongsTo關係。

+0

我剛剛注意到的一個意想不到的副作用是,在返回find('all')字段時,cake將默認使用您正在查詢的主模型作爲別名,而不是智能地根據字段名稱。 例如您在DB1中使用模型** Comment **進行查詢,在DB2中使用$ belongsTo模型** User **。如果您將字段指定爲array('first_name','title')''蛋糕返回 **'array('Comment.first_name','Comment.title')** **而不是 **'array( 'User.first_name','Comment.title')** ** 我現在可以明確指定模型名稱。 – Francis