显示来自两个连续相关数据库表的jqGrid数据

时间:2016-03-18 12:05:33

标签: javascript php jquery mysql jqgrid

我有这种情况:

一个数据库表A,显示jqGrid中的所有数据。 对于此表的一列,我有一个引用另一个数据库表B的外键 我已经设定了AB之间的关系,并且在jqGrid中也表现得很完美。一切都很好。

问题是:
我有其他列是引用表B的外键。但我需要的是显示B引用其他表C的另一个外键。我已经能够在jqGrid中使用(严重)formatter: 'select'显示结果并从PHP创建自定义数组来欺骗解决方案。

问题在于我可以看到数据,但由于实施不当,我无法过滤此列。

我使用Twig从PHP传递给jqGrid数组。 我需要创建两个辅助数组,一个用于表A的id列表,另一个用于表C中的值。我通过这种方式关联了两个表格。

这是我的代码:

// colModel
{name:'<%identificator%>', 
    index:'table_A_id', 
    jsonmap:'table_A_id',
    editable:true,
    editrules:{ edithidden:true, required:true },
    formoptions:{ elmsuffix:' (*)' }, 
    edittype: 'select', 
    stype:'select',
    formatter: 'select',
    editoptions:{
                    value:":<%repeat%>;<%table_A_id%>:<%table_C_value%><%/repeat%>"
                }

使用此代码,我在每个单元格中都有正确的结果,但在选择列表中没有正确的过滤。

恢复:我需要在表C中显示表A中的值,但两个表都没有关系,只能通过表B

有没有解决方案?

我使用jqGrid的4.0.0版本,我不使用loadonce属性。

1 个答案:

答案 0 :(得分:0)

最后,我认为解决方案非常特别:

我通过以下方式通过JSON将数据传递给jqGrid:

    // This is data from Table A(id, name, b_id)
    {
        "page":"1",
        "total":122,
        "records":3635,
        "rows":[
        {
            "id":1,
            "name":"example",
            "b_id":8
        },
        { 
            "id":2,
            "name":"example2",
            "b_id":19
        }]
    }

所以我无法将表A和C联系起来,但最后我使用模型关系在PHP中完成了它:

// This is data from Table A(id, name, b_id) with relations
{
    "page":"1",
    "total":122,
    "records":3635,
    "rows":[
    {
        "id":1,
        "name":"example",
        "b_id":8,
        "relations":{
            "relation":{
                "id":200,"name":"Pepe", "id_c":22
            }
        }
    },
    { 
        "id":2,
        "name":"example2",
        "b_id":19,
        "relations":{
            "relation":{
                "id":356,"name":"Jose", "id_c":45
            }
        }
    }]
}

jqGrid自动理解它,将正确的值放入indexjsonmap

    colModel:[ ...
, {
    name:'Title',
    index:'relation.id_c',
    jsonmap:'relations.relation.id_c',
    width: 40, editable:false
    stype:'select', formatter:'select',
    editoptions:{
        value:"ids_C_table:values_C_table"
    }
}
...]

通过这个实现,我得到了我需要的东西。单元格显示正确的数据,过滤器完美运行。

希望它有所帮助!