【发布时间】:2020-08-10 11:10:22
【问题描述】:
我正在尝试向我的 select2 过滤器(kartik 网格)添加自定义选项。此选项旨在选择 something_id=null 所在的所有行。这是一个简单的 crud 生成的网格,修改为使用 kartik 网格和 select2 过滤器,而不是 yii2 默认的网格/过滤器。
我尝试在我的 table2_id 列中这样做:
'filter' => [null => 'Nothing'] + Arrayhelper::map(Something::find()->orderBy('id)->asArray()->all(), 'id', 'thing')
但是这个新的“null”选项没有显示在菜单中。我假设 select2 null 只是意味着没有过滤器,而 select2 只是显示占位符。我在 select2 文档中找不到任何选项来修改此行为。此选项生成的 html 为:
<option value="" selected="" data-select2-id="5">Nothing</option>
但是 css 有属性visibility:hidden;。所以我尝试使用:
'filter' => [0 => 'Nothing'] + Arrayhelper::map(Something::find()->orderBy('id)->asArray()->all(), 'id', 'thing')
但我无法在控制器或搜索模型中正确地将'something_id'=>0 转换为'something_id'=>null 条件。尝试了很多事情,但在某些时候一切都失败了,我认为我的代码不值得在这里发布,而且我没有保留每段失败代码的副本,所以我想问一下正确的方法是什么从头开始做这件事。谢谢。
【问题讨论】:
-
当
id是0时,运行null过滤器的数据提供者的自定义查询怎么样? -
是的,我正在尝试这样做。例如与
-
``` if(!is_null($this->something_id)){ if ( $this->something_id == 0 ) { $query->andWhere(['something_id' => null] ); }else{ $query->andFilterWhere(['something_id' => $this->something_id]); } } ```
-
但是当我对第二列执行完全相同的操作时它会失败。如果我只从“wathever”列过滤器中选择“nothing”,我总是得到:
SELECT COUNT(*) FROM "table" WHERE ("something_id" IS NULL) AND ("wathever_id" IS NULL)即使在调试此请求时搜索模型中的“something_id”为空(而不是 0)。 -
即使我尝试这段丑陋的代码,当
$this->something_id为空时,我也会得到相同的结果:``` if(!is_null($this->something_id)){ if ( $this- >something_id == 0 ) { $query->andWhere(['somethign_id' => null]); }else{ $query->andFilterWhere(['something_id' => $this->something_id]); } }else{ $query->andFilterWhere(['something_id' => $this->something_id]); } ```
标签: yii2 grid jquery-select2 kartik-v