codeigniter:将数据/记录插入2个表中

时间:2016-04-19 06:02:21

标签: php codeigniter

我有2张桌子&pengguna&#39;和&#39; mahasiswa&#39;然后1有一个表格,其中1表格插入2个表格,到目前为止我设法插入数据但是当它与&#34;主键和#34;和&#34;外键&#34;它有问题,因为您可以从下面的代码id_pengguna中看到表pengguna中的主键,表id_pengguna中的mahasiswa是< strong>外键问题是,当我插入数据时,id_pengguna中的pengguna具有值,而在表mahasiswa中它没有值,下面是我的代码,是有什么简单的方法或我做错了什么?

PENGGUNA TABLE enter image description here MAHASISWA TABLE enter image description here

  

控制器

public function insertMahasiswa(){
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));
    $data1 = array(
            'username'=>$username,
            'password'=>$password,
            'level'=>3,
        );
    $nim = $this->input->post('nim');
    $nama = $this->input->post('nama');
    $email = $this->input->post('email');
    $telepon = $this->input->post('telepon');
    $data = array(
            'nim'=>$nim,
            'nama_mahasiswa'=>$nama,
            'email'=>$email,
            'telepon'=>$telepon,
        );
    $insert = $this->MMahasiswa->create('pengguna',$data1);
    $insert1 = $this->MMahasiswa->create('mahasiswa',$data);
    redirect(site_url('mahasiswa/data?balasan=1'));
}
  

MODEL

function create($table,$data){
    $query = $this->db->insert($table, $data);
    return $query;
}

3 个答案:

答案 0 :(得分:4)

您需要从模型文件中返回最后一个插入ID

在模型中

function create($table,$data){
    $query = $this->db->insert($table, $data);
    return $this->db->insert_id();// return last insert id
}

在控制器中

$id_pengguna = $this->MMahasiswa->create('pengguna',$data1);
    $data = array(
                'nim'=>$nim,
                'nama_mahasiswa'=>$nama,
                'email'=>$email,
                'telepon'=>$telepon,
                'id_pengguna'=>$id_pengguna// add last insert id to mahasiswa table
            );
        $insert1 = $this->MMahasiswa->create('mahasiswa',$data);

答案 1 :(得分:1)

在将数据插入第二个表(mahasiswa之前,您需要获取在表1(pengguna)中插入数据后创建的主要ID。

这可以通过两种方式完成:

  1. 使用codeigniter的insert_id()函数抓取最后一个插入ID。

    function create($table,$data) {
        $query = $this->db->insert($table, $data);
        return $this->db->insert_id(); } // return last insert id
    
  2. 在第一个表中插入数据后,获取具有相同username的行的ID。 (为此,您必须在username列中包含唯一的用户名)这将返回相应的ID 注意:您也可以使用电子邮件列执行此操作。

  3. 来源/参考:详细解释 - Inserting data in 2 tables through 1 Form - CodeIgniter

答案 2 :(得分:0)

你可以这样做(只有少数变化)

Controller.php这样

public function insertMahasiswa(){
    $username = $this->input->post('username');
    $password = md5($this->input->post('password'));

    $data1 = array(
            'username'=>$username,
            'password'=>$password,
            'level'=>3,
        );

    $nim = $this->input->post('nim');
    $nama = $this->input->post('nama');
    $email = $this->input->post('email');
    $telepon = $this->input->post('telepon');

    $data = array(
            'nim'=>$nim,
            'nama_mahasiswa'=>$nama,
            'email'=>$email,
            'telepon'=>$telepon,
        );
    $insert = $this->MMahasiswa->create('pengguna',$data1);
    $insert1 = $this->MMahasiswa->create('mahasiswa',$data);

    $insert = $this->MMahasiswa->create('pengguna',$data1,'mahasiswa',$data);

    redirect(site_url('mahasiswa/data?balasan=1'));
}

model.php

function create($table1, $data1, $table2, $data2){
    $this->db->insert($table1, $data1);
    $id_table1    = $this->db->insert_id();

    array_unshift($data2, array('id_pengguna'=>$id_table1));

    $this->db->insert($table2, $data2);
    $id_table2    = $this->db->insert_id();

    $return_data  = array($table1 => $id_table1, $table2 => $id_table2);

    return $returndata;
}