如何在 yii-db-query 中设置数据库连接?
我有一个 3 数据库连接:
db, db2 and db3
当我使用此默认查询时:
$query = (new \yii\db\Query())
->select('*')
->from('trans_journal')
->all();
它将返回一个 错误。 trans_journal 未找到,因为trans_journal 来自db2 连接。
当我使用这个查询时:
$query = (new \yii\db\Query())
->select('*')
->from('trans_journal')
->all(\Yii::$app->db2);
查询将成功生成,但问题是它将返回一个数组。
还有其他方法可以解决这个问题吗?
最佳答案
如果您使用的是事件记录模型,则可以在您的模型中为每个模型正确地重新定义 getDB 函数:
// Model1
public function getDb() {
return Yii::$app->db1;
}
//Model 2
public function getDb() {
return Yii::$app->db2;
}
如果您正在使用命令,您可以在 createCommand 调用中设置正在使用的数据库
// To get from db1
Yii::$app->db1->createCommand(
(new \yii\db\Query)->select('col1, col2, ... ')->
from('your_table_db1'))->queryAll();
// To get from db2
Yii::$app->db2->createCommand(
(new \yii\db\Query)->select('col1, col2, ... ')->
from('your_table_db2')->queryAll();
all() 方法执行查询并将所有结果作为数组返回。
您可以迭代结果以获取每个模型,例如:
$results = Yii::$app->db1->createCommand(
(new \yii\db\Query)->select('col1, col2, ... ')->
from('your_table_db1'))->queryAll();
foreach($results as $key => $value ){
echo $value->col1;
// or $value['col1];
}
关于yii2 - Yii 2 - 如何在多数据库的数据库查询中设置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414564/