如何在yii-db-query中设置数据库连接?
我有一个 3数据库连接:
db,db2和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);
查询将成功生成,但问题是返回数组。
还有另一种解决方法吗?
答案 0 :(得分:2)
如果您使用的是活动记录模型,则可以在模型中正确地重新定义每个模型的getDB函数:
// Model1
public function getDb() {
return Yii::$app->db1;
}
//Model 2
public function getDb() {
return Yii::$app->db2;
}
如果您正在使用命令,则可以在createCommand call
中设置正在使用的数据库// 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];
}
答案 1 :(得分:1)
$query = (new \yii\db\Query())
->select('*')
->from('trans_journal')
->all();
$dataProvider = new ActiveDataProvider([
'db' => Yii::$app->get('db2'),
'query' => $query,
]);
$models = $dataProvider->getModels();