Php Yii CGridview索引过滤器

Php Yii CGridview索引过滤器,php,yii,cgridview,Php,Yii,Cgridview,我有CGridView的自定义字段。每一列都是不同的自定义字段,带有它的id。显示它们很好。当我尝试对这些字段应用筛选器时,问题开始出现 我有4个过滤器,名称分别为CustomField[5],CustomField[6],CustomField[8]和CustomField[12],这些过滤器的id对它们进行了索引。过滤后,yii生成了错误的查询: 正如您所看到的,它一直循环到最后一个元素(因为最大的id是12,所以它一直循环到12)。但如果我添加字母(将索引设为字符串),它将生成正确的查询

我有CGridView的自定义字段。每一列都是不同的自定义字段,带有它的id。显示它们很好。当我尝试对这些字段应用筛选器时,问题开始出现

我有4个过滤器,名称分别为
CustomField[5]
CustomField[6]
CustomField[8]
CustomField[12]
,这些过滤器的id对它们进行了索引。过滤后,yii生成了错误的查询:

正如您所看到的,它一直循环到最后一个元素(因为最大的id是12,所以它一直循环到12)。但如果我添加字母(将索引设为字符串),它将生成正确的查询:

过滤器下拉列表由以下代码生成:

echo CHtml::dropDownList(
    "CustomField[{$column->id}]",
    $this->getFilterValue($column),
    ['' => ''] + CustomFieldValue::getValue($column),
    $column->tagOptions
);
它生成以下html:

 <tr class="filters">
    <td>
        <select id="CustomField_5" name="CustomField[5]">
            <option selected="selected" value=""></option>
            <option value="29">Olympic Male Fly -58</option>
            <option value="33">Olympic Female Bantam -57</option>
        </select>
    </td>
    <td>
        <select id="CustomField_6" name="CustomField[6]">
            <option selected="selected" value=""></option>
            <option value="4">Quarter-finals</option
        </select>
    </td>
    <td>
        <select id="CustomField_8" name="CustomField[8]">
            <option selected="selected" value=""></option>
            <option value="3">Bronze</option>
            <option value="1">Gold</option>
            <option value="4">Participation</option>
        </select>
    </td>
    <td>
        <select id="CustomField_12" name="CustomField[12]">
            <option selected="selected" value=""></option>
            <option value="2">Silver</option>
            <option value="1">Gold</option>
        </select>
    </td>
</tr>

奥运会男子飞行-58
奥运会女子班塔姆-57

四分之一决赛我认为yii将
CustomField[{$column->id}]
视为一个索引数组。这也与yii中下拉列表的形成有关。那么,为什么不将
name
id
相同来解决这个问题呢:
CustomField{$column->id}

问题

这是
jquery.ba bbq.js
处理url参数的方式的问题。如果参数作为url字符串传递,即
&a=b&c=d..
,则会从中创建一个对象。在这个过程中,它将任何数值索引的参数视为数组,并用空元素填充它们

以下是对过滤器html进行序列化的结果:

CustomField[5]=&CustomField[6]=&CustomField[8]=&CustomField[12]=
下面是序列化字符串上
$.param.querystring
的结果

CustomField[]=&CustomField[]=&CustomField[]=&CustomField[]=&CustomField[]=&
CustomField[]=&CustomField[]=&CustomField[]=&CustomField[]=&CustomField[]=&
CustomField[]=&CustomField[]=&CustomField[]=
$(函数(){
$(“#单击我”)。在(“单击”,函数()上{
变量数据=$(“.filters select”).serialize();
$(“#序列化”).html(decodeURIComponent(数据)+“\n\n”+decodeURIComponent($.param.querystring(“,数据));
});
});

奥运会男子飞行-58
奥运会女子班塔姆-57
四分之一决赛
青铜色
黄金
参与
银币
黄金

连载
你能添加为其中一个过滤器生成的html而不带字母吗?@topher更新的问题,因为我需要索引它。如果我的名字是“代码> CuxField{{列} ID} <代码>,我将不得不另外解析POST。@ Justinas,您是否试图强制解析器将Cuffield的索引视为String:<代码>自定义字段[ {{$tras-ID} ] < /COD>?第一个解决方案看起来像是资源和时间的浪费。第二个是不可能的,因为索引必须和数据库中的索引相同。我将尝试第三种解决方案。