我在一個模塊/模型文件夾中有模型,名爲SuperModel。並在另一個模塊/模型文件夾中關聯ChildModel1,ChildModel2。yii來自另一個數據庫的活動記錄相關記錄
來自database1的超級模型數據記錄必須包含放置在其他數據庫中的相關記錄Child1和Child2。
有沒有辦法通過yii ActiveRecord關係機制同時通過少數數據庫獲取關係記錄?類似的東西:
$super_record = SuperRecordModel::model()->with(
'RecordFromDB_A',
'RecordFromDB_B'
)->findAll($criteria);
或者我需要使用類似:
// From first DB...
$super_record = SuperRecordModel::model()->findAll();
// Separately from another DB A...
$super_record->ChildsA = ChildsAModel::model()->findAll(
't.parent_id = :super_record_id'
);
// Separately from another DB B...
$super_record->ChildsB = ChildsBModel::model()->findAll(
't.parent_id = :super_record_id'
);
怎樣是正確的?
更新:我不能在多數據庫選擇操作中使用yii活動記錄關係...如何在活動記錄方法內的數據庫之間切換?例如:
$catalogs = $this->findAll();
// Set new database connection for this context..
// $this->setDbConnection(yii::app()->db2);
foreach($catalogs as &$catalog) {
$catalog->service = Services::model()->find(
't.catalog_id = :catalog_id', ...);
// this gives error: table services cannot be found in the database
}
您是否測試過兩種方法,看它是否有效?我沒有yii設置來測試。我在yii中發現了關於多重數據庫的支持.... http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/ – xJoshWalker
謝謝@joshjwalker,我讀過這個文檔,現在瞭解我需要實現代碼的第二個變體...如何在活動記錄方法內的數據庫之間切換? – itnelo
在您的「服務」ActiveRecord模型中,您需要定義備用數據庫連接,類似於我發送的文章的「GetDbConnection()覆蓋」部分。這將是我最好的猜測 – xJoshWalker