Grocery Crud设置3个表之间的关系

问题描述 投票:1回答:2

我有3个sql表,他们使用此表单。

测试

  • 为test_id
  • TEST_NAME

  • example_id
  • example_test_id

SOMETHING

  • something_id
  • something_example_id

所以我想用ID中的TEST表的名称并将其发送到表EXAMPLE,然后将example_id发送到SOMETHING表。完成关系我希望TEST表的名称由SOMETHING表中的example_id显示。

我们试过这个

 $crud->set_relation_n_n('something','example','test','example_id','example_test_id','test_name');

它接受TEST的id并将其保存到example_test_id,但我们希望将它保存在something_example_id并显示test_name。所有表都有外键和主键。希望你能理解。

php mysql codeigniter foreign-keys grocery-crud
2个回答
1
投票

如果您使用自定义模型函数而不是set_relation_n_n函数,则会更容易。

首先创建一个模型函数,从示例表中获取所有id和test_id

public function get_example_list()
    {
        $this->db->select('example_id, example_test_id');
        $this->db->order_by('example_id asc');
        return $this->db->get('example')->result();
    }

接下来,使用第一个模型中的test_id创建第二个模型函数以获取test_name

public function get_test_names($id)
    {
        $this->db->select('test_name');
        $this->db->from('test');
        $this->db->where('test_id', $id);
        $name=$this->db->get();
        return $name->row()->test_name; 
    }

在您的控制器中使用上述函数来创建包含所需数据的数组

$list = $this->your_model->get_example_list();

        foreach ($list as $column => $data) {
            $myarray[$data->example_id] = $this->your_model->get_test_names($data->example_test_id);
        }

最后使用“field_type”函数将数组传递给something_example_id。

$crud->field_type('something_example_id','dropdown',$myarray);

现在。在something_example_id列中,您有一个下拉列表,显示test_name值并在您的数据库中保存example_id值。


0
投票

如果您不需要单独的下拉菜单,则可以在示例表上创建数据库视图:

create view_example as
  select example.*, test.test_name as test_name
  from example left outer join test on 
    example.example_test_id = test.test_id

然后在你的控制器中为表something_example_id:

$crud->set_primary_key('example_id','view_example');
$crud->set_relation('something_example_id', 'view_example', '{test_name}.{example_id}');
© www.soinside.com 2019 - 2024. All rights reserved.