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;
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;
}
并且服务器数据库异常:
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,
]);
我的搜索功能中有 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;
}
并且服务器数据库异常:
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,
]);