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;
Model1
和 Model2
在 db1
中
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() 或其他执行方法的情况下在新查询中设置数据库配置?的主要内容,如果未能解决你的问题,请参考以下文章