我在一个模块/模型文件夹中有模型,名为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