使用 CodeIgniter 框架将数据插入到具有外键的多个表中

Posted

技术标签:

【中文标题】使用 CodeIgniter 框架将数据插入到具有外键的多个表中【英文标题】:Inserting data into multiple tables with foreign key using CodeIgniter framework 【发布时间】:2017-06-15 06:58:14 【问题描述】:

我尝试使用 CodeIgniter 将数据插入到具有外键的多个表中。 这是我的第一张桌子,名为 koor_pen no_koor (primary) | utm_y | utm_x |纬度 |隆吉 这是我的第二张表,名为 input_pen no_form (primary) | kode_bps | no_obs | no_koor (外国) | t_tanah |卡坦

这是我的控制器

function c_submit()
    $data = array(
        'no_form' => $this->input->post('noform'),
        'kode_bps' => $this->input->post('kodebps'),
        'no_obs' => $this->input->post('noobs'),
        'no_koor' => $this->input->post('nokoor'),
        'tanaman_u' => $this->input->post('tutama'),
        't_tanah' => $this->input->post('ttanah'),
        'catatan' => $this->input->post('cat')
    );

    $datakoor = array(
        'no_koor' => $this->input->post('nokoor'),
        'utm_y' => $this->input->post('y'),
        'utm_x' => $this->input->post('x'),
        'latit' => $this->input->post('deg')." ".
                    $this->input->post('min')." ".
                    $this->input->post('sec'),
        'longi' => $this->input->post('deg2')." ".
                    $this->input->post('min2')." ".
                    $this->input->post('sec2')
    );

    $no_obs = $this->session->userdata('no_obs');
    $this->m_input->m_submit($data, $datakoor);
    redirect(base_url("c_input"));

和模型

function m_submit($data, $datakoor) 

    $this->db->trans_start();

    $this->db->insert('koor_pen', $datakoor); 
    $no_koor = $this->db->insert_id(); 

    $this->db->where('no_koor',$no_koor);
    $this->db->insert('input_pen', $data);

    $this->db->trans_complete(); 

    return $this->db->insert_id(); 


当我运行代码时,它会显示这样的错误

【问题讨论】:

请检查您在主表中存在的子表中添加的值。 如果两个表同时输入一个表格怎么办? @PankajSharma @Kiki 你会在下面查看我的答案吗? @Kiki 请先检查koor_pen表记录是否插入。 它确实有效,感谢您的帮助@B.Desai 【参考方案1】:

您的值正在变为空。您必须在$data 中传递$no_koor,以便可以替换该值。试试这个:

function m_submit($data, $datakoor) 

    $this->db->trans_start();

    $this->db->insert('koor_pen', $datakoor); 
    $no_koor = $this->db->insert_id(); 

    //$this->db->where('no_koor',$no_koor);
    $data['no_koor'] = $no_koor;
    $this->db->insert('input_pen', $data);

    $this->db->trans_complete(); 

    return $this->db->insert_id(); 


【讨论】:

【参考方案2】:

问题就在这里 no_koor (foreign) 这是你的外键,在你的查询中 no_koor 这个字段在你发送图像时在你的查询中得到“”。所以请先检查您的查询。

【讨论】:

【参考方案3】:

如您的图片所示,该错误与foreign key constraint 有关。规则是,您只能在child 表中添加或更新已经存在于parent 表中的值。因此,在插入时请确保您尝试在child 表中插入的值已经存在于parent 表中。

有时插入顺序也很重要,可能是查询中的值是它们的值,但您首先运行子表查询。所以在这种情况下也要检查订单。

【讨论】:

如果两个表格同时输入一个表格怎么办? 顺序就像先在master中添加数据,然后在child中添加数据 所以当我以一种形式同时输入两个表格时是否可能? 是的,按照上面的顺序就行了 是的,我做到了,但它根本不起作用。你能帮我看看我的模型吗?

以上是关于使用 CodeIgniter 框架将数据插入到具有外键的多个表中的主要内容,如果未能解决你的问题,请参考以下文章

使用Codeigniter将具有会话数据的数据插入数据库

如何使用 Codeigniter 将 JQuery datepicker 中的值插入 MySQL 日期数据类型?

将日期插入数据库时​​出现 SQL 语法错误(框架:codeigniter)

如何使用codeigniter 4框架在mysql数据库中插入多行?

Codeigniter 将多个输入字段动态插入到数据库中?

使用实体框架将行插入到具有复合键的表中