如何在 yii-db-query 中设置数据库连接?
我有3 个数据库连接:
db、db2 和 db3
当我使用这个默认查询时:
$query = (new \yii\db\Query())
->select('*')
->from('trans_journal')
->all();
Run Code Online (Sandbox Code Playgroud)
它会返回一个 错误。该trans_journal没有发现,因为trans_journal从DB2连接。
当我使用这个查询时:
$query = (new \yii\db\Query())
->select('*')
->from('trans_journal')
->all(\Yii::$app->db2);
Run Code Online (Sandbox Code Playgroud)
查询将成功生成,但问题是它将返回一个数组。
有没有另一种方法来解决这个问题?
如果您使用的是活动记录模型,则在您的模型中,您可以为每个模型正确重新定义 getDB 函数:
// Model1
public function getDb() {
return Yii::$app->db1;
}
//Model 2
public function getDb() {
return Yii::$app->db2;
}
Run Code Online (Sandbox Code Playgroud)
如果您正在使用命令,您可以在 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();
Run Code Online (Sandbox Code Playgroud)
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];
}
Run Code Online (Sandbox Code Playgroud)