Yii2- Select2 按钮作为网格视图过滤器不过滤
Yii2- Select2 button as Grid view filter doesn't filter
我想在 Yii Grid 视图中使用 Select2 dr 作为过滤器,但它根本不过滤,只刷新页面。
我从 2 个表中获取数据 - 我只从帐户中获取 user_id,而从学分中我获取所有其他内容。每个过滤器都有效,除了'user_id'一个。
<?php
echo GridView::widget(
[
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'attribute' => 'wp_id',
'value' => 'accounts.user_id',
'filter' => Select2::widget(
[
'model' => $searchModel,
'attribute' => 'wp_id',
'data' => ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id'),
'options' => ['placeholder' => ' --Filter by user id-- '],
'language' => 'en',
'pluginOptions' => [
'allowClear' => true,
],
]
),
],
],
]
); ?>
这是控制器中的动作。
<?php
public function actionIndex()
{
$searchModel = new CreditsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
} ?>
这是搜索模型方法
<?php
public function search($params)
{
$query = Credits::find()->with('accounts');
$dataProvider = new ActiveDataProvider([
'query' => $query
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
if(!empty($this->user_id)) {
$query->andFilterWhere(['=', 'accounts.user_id', $this->user_id]);
}
// grid filtering conditions
$query->andFilterWhere([
'user_id' => $this->user_id,
'wp_id' => $this->wp_id,
'credits_bought' => $this->credits_bought,
'purchase_date' => $this->purchase_date,
'id' => $this->id,
]);
return $dataProvider;
}
} ?>
提前致谢!
因为您在 GridView
过滤器下传递 wp_id
并从 Accounts
模型中选择 wp_id
作为 select2-dropdown [=18 的值=]
ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id')
尽管您使用 gridview 列属性 wp_id
并使用 select2 过滤同一列的 user_id
令人困惑,但如果您希望这样做,您可能需要更改以上为
ArrayHelper::map(Accounts::find()->all(), 'user_id', 'wp_id')
我想在 Yii Grid 视图中使用 Select2 dr 作为过滤器,但它根本不过滤,只刷新页面。
我从 2 个表中获取数据 - 我只从帐户中获取 user_id,而从学分中我获取所有其他内容。每个过滤器都有效,除了'user_id'一个。
<?php
echo GridView::widget(
[
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
[
'attribute' => 'wp_id',
'value' => 'accounts.user_id',
'filter' => Select2::widget(
[
'model' => $searchModel,
'attribute' => 'wp_id',
'data' => ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id'),
'options' => ['placeholder' => ' --Filter by user id-- '],
'language' => 'en',
'pluginOptions' => [
'allowClear' => true,
],
]
),
],
],
]
); ?>
这是控制器中的动作。
<?php
public function actionIndex()
{
$searchModel = new CreditsSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
} ?>
这是搜索模型方法
<?php
public function search($params)
{
$query = Credits::find()->with('accounts');
$dataProvider = new ActiveDataProvider([
'query' => $query
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
if(!empty($this->user_id)) {
$query->andFilterWhere(['=', 'accounts.user_id', $this->user_id]);
}
// grid filtering conditions
$query->andFilterWhere([
'user_id' => $this->user_id,
'wp_id' => $this->wp_id,
'credits_bought' => $this->credits_bought,
'purchase_date' => $this->purchase_date,
'id' => $this->id,
]);
return $dataProvider;
}
} ?>
提前致谢!
因为您在 GridView
过滤器下传递 wp_id
并从 Accounts
模型中选择 wp_id
作为 select2-dropdown [=18 的值=]
ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id')
尽管您使用 gridview 列属性 wp_id
并使用 select2 过滤同一列的 user_id
令人困惑,但如果您希望这样做,您可能需要更改以上为
ArrayHelper::map(Accounts::find()->all(), 'user_id', 'wp_id')