Grocery CRUD中的一对多关系

时间:2015-09-18 20:59:09

标签: php codeigniter grocery-crud

Grocery CRUD网站上有one-to-one relationshipmany-to-many relationship的例子,但没有一对多关系的例子。

以下是一个示例:我有car_makescar_models个表。每个model_id可能只属于一个make_id。每个make_id都可以与许多model_id相关联。

SQFiddle:http://sqlfiddle.com/#!9/c357c

现在,我尝试设置Grocery CRUD:

public function cars(){
    $crud = new grocery_CRUD();
    $crud->set_table("car_makes");
    $crud->set_relation("make_id","car_models","model_name");
    $output = $crud->render();
    $this->_example_output($output);    
    }

这不起作用 - 在网格视图中,make_id突然被model_name取代,这是完全错误的。例如,当我明确指出model_name伏与make_id 2相关联,而make_id 2有make_name雪佛兰时,我看到了“福特伏特”。查看单个记录时,只有一个品牌可见,应该有一个列表。

我真正想做的是让它更容易为汽车品牌添加更多模型,并查看已经与品牌相关联的模型。

我应该如何配置Grocery CRUD来处理这种1-n关系?

我需要避免多对多的关系,因为模型可能不属于多个品牌。感谢。

编辑:一位同事建议通过模型列表处理模型,而不是制作列表的一部分。这似乎是合理的,但不太有用。

编辑2:以下是允许您查找模型并为其指定品牌的代码:

public function car_models(){
    $crud = new grocery_CRUD();
    $crud->set_table("car_models");
    $crud->set_relation("make_id","car_makes","make_name");
    $output = $crud->render();
    $this->_example_output($output);
    }

现在,我真的认为它应该是另一种方式 - 你查找make并为其分配模型 - 但我不认为Grocery CRUD在使用set_relation()时支持1-n关系。这支持多对多关系,您可以在其中查找1部电影并为其分配许多演员。也许通过使用set_relation_n_n(),这可以实现吗?

1 个答案:

答案 0 :(得分:0)

请检查此链接Grocery CRUD确实提供了一对多关系,并且还使用示例解释了Everywell。 set_relation函数仅适用于1-n,即一对多关系,请参阅文档中的内容。

set_relation

这是您需要遵循的功能和参数

            params.max = Math.min(params.max ? params.int('max') : 25, 100)
            int offset = 0;
            if(params.offset != null) {
                offset = (Integer.valueOf(params.offset));
            }

第一个参数应该是字段名,第二个是关系表,第三个是需要显示的关系表字段名。其他参数是可选的,您也可以使用它。

正确浏览文档,你一定会得到它。

相关问题