yii2 mysql like_Yii2实现跨mysql数据库关联查询排序功能
遇到一個項目,需要跨表網上找了很多的資料,整理一下,方便以后再次使用
背景:在一個mysql服務器上(注意:兩個數據庫必須在同一個mysql服務器上)有兩個數據庫:
memory (存儲常規數據表) 中有一個 user 表(記錄用戶信息)
memory_stat (存儲統計數據表) 中有一個 user_stat (記錄用戶統計數據)
現在在 user 表生成的 GridView 列表中展示 user_stat 中的統計數據
只需要在User的model類中添加關聯.
public functiongetStat()
{return $this->hasOne(UserStat::className(), ['user_id' => 'id']);
}
在GridView就可以這樣使用來展示統計數據
= GridView::widget(['dataProvider' => $dataProvider,
'columns' =>[//其他列
['label' => '統計數據',
'value' => function($model){return isset($model->stat->data) ? $model->stat->data : null;
}
],
//其他列
],]);?>
或者這樣
= GridView::widget(['dataProvider' => $dataProvider,
//'filterModel' => $searchModel,
'columns' =>[//['class' => 'yii\grid\SerialColumn'],
['label' => '數據統計',
'attrube'=>'data' //輸入對應的
'value' => 'stat.data'],['class' => 'yii\grid\ActionColumn'],],]);?>
現在增加了一個需求,需要在user GridView 列表中對統計數據進行排序和篩選
若 user 和 user_stat 表在同一個數據庫下我們可以這樣做:
UserSearch:
public $data;public functionrules()
{/*{{{*/
return[
['data'], 'integer'],
//其他列
];
}/*}}}*/
public function search($params, $onlyActiveUsers = false)
{$query = User::find();$query->joinWith(['stat']);$dataProvider = newActiveDataProvider(['query' => $query,
'sort' =>['attributes' =>[//其他列
'data' =>['asc' => [UserStat::tableName() . '.data' => SORT_ASC],
'desc' => [UserStat::tableName() . '.data' => SORT_DESC],],
//其他列
],
'defaultOrder' =>['id' => SORT_DESC,],],
'pagination' =>['pageSize' => 50,],]);$this->load($params);if (!$this->validate()) {$query->where('0=1');return $dataProvider;
}$query->filterWhere([//其他列
UserStat::tableName() . '.data' => $this->data
]);return $dataProvider;
}
search 表單中添加以下列就可以篩選了
//其他列
= $form->field($model, 'data')?>
//其他列
= Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
那么,如何來解決這個問題呢?
其實很簡單,只需要重寫 user_stat 的 model 類下的 tableName() 方法就可以了。
//默認是這樣的
public static functiontableName()
{return 'user_stat';
}public static functiongetDb()
{return Yii::$app->get('dbStat');
}
//只需要在表明前添加數據庫名
public static functiontableName()
{return 'memory_stat.user_stat';
}public static functiongetDb()
{return Yii::$app->get('dbStat');
}
轉載:https://segmentfault.com/a/1190000008107267
侵刪!!!
總結
以上是生活随笔為你收集整理的yii2 mysql like_Yii2实现跨mysql数据库关联查询排序功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内蒙乌海海勃湾区的萝卜适合啥时候播种?
- 下一篇: 厨房里有哪些食物需要冷藏?