Yii2 如何在不使用 all()、one() 或其他执行方法的情况下在新查询中设置数据库配置?

Yii2 How can i set the db config in new Query without use all(), one() or other execution method?

我的搜索功能中有 2 个模型由一个字段连接,我想为我的 GridView 创建一个 ActiveDataProvider。这是我目前所拥有的:

我的 yii 数据库配置:

db => users logs data;
db1 => system data;

Model1Model2db1

public function search($params)
{
    // (...)
    $query1 = Model1::find();
    $query2 = Model2::find();
    $query1->select(
            new Expression ("'Data model1: ' Model"),
            'model1.id',
            'model1.columns',
       )->jointWith(['mODEL2'])
       ->andWhere(new Expression ('model1.id || model1.columns != model2.id || model2.columns'));

    $query2->select(
            new Expression ("'Data model2: ' Model"),
            'model2.id',
            'model2.columns',
        )->jointWith(['mODEL1'])
        ->andWhere(new Expression ('model1.id || model1.columns != model2.id || model2.columns'));

    $unionQuery = (new  Query())->from(['dummy_name'=>$query1->union($query2)]);

    $dataProvider = new ActiveDataProvider([
         'query'=>$unionQuery,
    ]);
    // (...)

    return $dataProvider;
}

并且服务器数据库异常:

the table or view not exist

在我的模型(1 和 2)中,我明确指出我使用了 db1 连接,但是我如何在不使用 $unionQuery->all(Yii::$app->db1) 的情况下在 $unionQuery 中做到这一点?

那不行。

How can i do that in the $unionQuery without use $unionQuery->all(Yii::$app->db1)???

你不能。应该在查询执行时指定数据库连接。

在您的情况下,查询是在 ActiveDataProvider 级别执行的,因此您应该使用正确的数据库连接设置 ActiveDataProvider::$db 属性。

In your case query is executed at ActiveDataProvider level so you should set ActiveDataProvider::$db property with correct db connection.

太棒了,非常感谢这有效

$dataProvider = new ActiveDataProvider([
    'query'=>$unionQuery,
    'db'=>Yii::$app->db1,      
]);