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

Posted

技术标签:

【中文标题】Yii2 如何在不使用 all()、one() 或其他执行方法的情况下在新查询中设置数据库配置?【英文标题】:Yii2 How can i set the db config in new Query without use all(), one() or other execution method? 【发布时间】:2018-04-21 14:44:25 【问题描述】:

我的搜索功能上有 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;

以及服务器数据库异常:

表或视图不存在

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

那行不通。

【问题讨论】:

您的代码和您的问题对我来说似乎毫无意义.. 尝试解释您的目标.. 而不仅仅是断言。 我认为 multipeer-connectivity 标签在这里不合适,因为它指的是 ios 框架 【参考方案1】:

如何在 $unionQuery 中做到这一点而不使用 $unionQuery->all(Yii::$app->db1)???

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

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

【讨论】:

@RacielBritoDorta 如果它适合你,请接受答案。【参考方案2】:

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

太棒了,非常感谢这个工作

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

【讨论】:

以上是关于Yii2 如何在不使用 all()、one() 或其他执行方法的情况下在新查询中设置数据库配置?的主要内容,如果未能解决你的问题,请参考以下文章

yii2查询汇总

Yii2 数据查询

Yii2.0 数据库查询

yii2数据库简单操作

yii2数据库的简单操作

Yii2框架数据库增删改查