Yii2- Select2 按钮作为网格视图过滤器不过滤
Posted
技术标签:
【中文标题】Yii2- Select2 按钮作为网格视图过滤器不过滤【英文标题】:Yii2- Select2 button as Grid view filter doesn't filter 【发布时间】:2020-04-17 07:28:22 【问题描述】:我想在 Yii Grid 视图中使用 Select2 dr 作为过滤器,但它根本不过滤,只刷新页面。
我从 2 个表中获取数据——我只从账户中获取 user_id,从学分中获取其他所有数据。并且每个过滤器都有效,除了 And '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;
?>
提前致谢!
【问题讨论】:
哪个不工作?您已将 select2 过滤器字段配置为wp_id
并且您正在询问过滤 user_id
? ,请澄清,因为 gridview 列是 wp_id
,它将被传递给搜索模型,wp_id
根据 ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id')
而不是 user_id
作为值传递,因为它显示为下拉列表的文本和不是价值。
实际上,user_id 仅显示为文本而 wp_id 用于值的信息帮助我解决了这个问题,现在一切正常。非常感谢,我看到这个问题很愚蠢,解决方案很容易找到,但我仍在学习如何准确地使用 Yii 框架及其组件。再次非常感谢您,祝您有美好的一天!
没问题,很高兴能帮上忙,每个人都需要时间来学习。我将其添加为答案,因此您可以在回来时接受它。
【参考方案1】:
因为您在GridView
过滤器下传递wp_id
并从Accounts
模型中选择wp_id
作为select2-dropdown 的值
ArrayHelper::map(Accounts::find()->all(), 'wp_id', 'user_id')
虽然使用 gridview 列属性 wp_id
并使用 select2 过滤同一列的 user_id
会让人感到困惑,但如果您想要这样做,您可能需要将上面的内容更改为
ArrayHelper::map(Accounts::find()->all(), 'user_id', 'wp_id')
【讨论】:
在上面的解决方案中,数据将被“wp_id”过滤,“wp_id”显示在下拉列表中。如何使“user_id”显示在下拉列表中,而数据由相同的“wp_id”过滤? @NixMan 你应该用代码发布一个单独的问题以上是关于Yii2- Select2 按钮作为网格视图过滤器不过滤的主要内容,如果未能解决你的问题,请参考以下文章
不加载kartik 的select2 作为GridView 中的过滤器。 Yii2