Grocery Crud 设置 3 个表之间的关系
Grocery Crud set relation between 3 tables
我有 3 个 sql table 并且他们使用这种形式。
测试
- test_id
- test_name
示例
- example_id
- 示例_test_id
有点东西
- something_id
- 某事_example_id
所以我想把 TEST table 的名字和 id 放在一起
并将其发送到 table EXAMPLE,然后 example_id 应该发送到 SOMETHING table。
完成关系后,我希望 TEST table 的名称由 SOMETHING table.
中的 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。
所有 table 都有外键和主键。
希望你明白。
如果您使用自定义模型函数而不是 set_relation_n_n 函数,对您来说会更容易。
首先创建一个模型函数以从示例table
中获取所有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 值保存在您的数据库中。
如果您不需要单独的下拉菜单,您可以在示例中创建数据库视图 table:
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
然后在您的控制器中 table something_example_id:
$crud->set_primary_key('example_id','view_example');
$crud->set_relation('something_example_id', 'view_example', '{test_name}.{example_id}');
我有 3 个 sql table 并且他们使用这种形式。
测试
- test_id
- test_name
示例
- example_id
- 示例_test_id
有点东西
- something_id
- 某事_example_id
所以我想把 TEST table 的名字和 id 放在一起 并将其发送到 table EXAMPLE,然后 example_id 应该发送到 SOMETHING table。 完成关系后,我希望 TEST table 的名称由 SOMETHING table.
中的 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。 所有 table 都有外键和主键。 希望你明白。
如果您使用自定义模型函数而不是 set_relation_n_n 函数,对您来说会更容易。
首先创建一个模型函数以从示例table
中获取所有id和test_idpublic 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_namepublic 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 值保存在您的数据库中。
如果您不需要单独的下拉菜单,您可以在示例中创建数据库视图 table:
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
然后在您的控制器中 table something_example_id:
$crud->set_primary_key('example_id','view_example');
$crud->set_relation('something_example_id', 'view_example', '{test_name}.{example_id}');