【发布时间】:2016-04-05 06:46:53
【问题描述】:
我已经定义了 2 个数据库,例如
return [
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1name',
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db2name',
'username' => 'db2username',
'password' => 'db2password',
],
],
];
现在我在“db1”中有一个“users”表,在“db2”中有一个“countries”表
users
id , country_code , username , password
1 , DE , xyz , 12345
2 , FR , abc , 12345
countries
code , name
DE , Germany
FR , France
IN , India
我已经定义了 users.country_code 和 countries.code 之间的外键关系
问题
但是当我尝试使用 gii 为“用户”表创建模型时,它会出错,可能是因为表关系来自 2 个不同的数据库。 如何在模型关系中使用来自不同数据库的表。
欢迎提出建议
【问题讨论】:
-
我认为 gii 使用了存储在
db中的数据库连接。因此它会产生一个错误(如this)。 -
嗨,robsch,我已经检查了您提供的链接,但是如果您可以让我知道在涉及多个数据库时如何创建连接语句,对于单个数据库中的表,它是这样的 - ' joinrel'=>array(self::BELONGS_TO,'User','code'),
-
您是否已经有任何可以提供的代码?在 SQL 中,表需要以它们的数据库名称为前缀以进行真正的连接。然后它应该工作。 Yii2 必须意识到这一点。如果您覆盖 getDb(),我会预料到会发生这种情况。根据guide,我认为这会很简单......到目前为止你编码了什么,你得到了什么错误?请更新您的帖子。
-
当要使用 Gii 生成模型时,可以选择使用哪个 db 连接。默认是“db”,你应该写 db1。 Leter,当您使用 Gii 生成模型时,您可以在 User 模型中编写关系查询,并且该关系将引用您的国家模型。
标签: yii2 relationship yii2-advanced-app multiple-databases yii2-model