【问题标题】:Grocery Crud set relation between 3 tablesGrocery Crud 设置 3 个表之间的关系
【发布时间】:2016-01-30 18:14:40
【问题描述】:

我有 3 个 sql 表,它们都使用这种形式。

测试

  • test_id
  • test_name

示例

  • example_id
  • example_test_id

某事

  • something_id
  • something_example_id

所以我想将 TEST 表的名称与 id 放在一起 并将其发送到表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


    【解决方案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 值保存在您的数据库中。

    【讨论】:

      【解决方案2】:

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

      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}');
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-25
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-02
        相关资源
        最近更新 更多