2015-05-01 87 views
0

我遇到了insert_id问题。我使用的是CodeIgniter。我有一种方法,其中我插入一些值,并在其中我返回如何在同一模型中使用另一种方法中的模型中的一种方法使用insert_id

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

我想在同一模型中的另一种方法中使用此值。我试过了:$insert_id=$this->add_teacher_subject();但以这种方式,第一个方法再次运行,我没有收到last_insert_id,但是这个值为+1。请告诉我,我怎么能解决这个问题?

我的模式是:

public function add_teacher_subject() { 

     $date = new DateTime("now"); 
     $data=array(
      'teacher_id'=>$this->input->post('teacher'), 

      'user_id'=>$this->session->userdata['user_id'], 

      'created_at'=>$date->format('Y-m-d H:i:s') 

     ); 

     $this->db->insert('student_surveys',$data); 
     $insert_id=$this->db->insert_id(); 
     return $insert_id; 

    } 
    public function survey_fill() 
    { 
      $insert_id=$this->add_teacher_subject(); 
     if ($this->input->post('answer')) { 
      $answers= $this->input->post('answer');   
      if (null !==($this->input->post('submit'))) { 
       $date = new DateTime("now"); 
       foreach($answers as $question_id=>$answer) 
       { 
        $data = array(
         'user_id'=>$this->session->userdata['user_id'], 
         'question_id'=>$question_id, 
         'answer'=>$answer,    

         'student_survey_id' => $insert_id 
        ); 

        $this->db->insert('survey_answers', $data); 

       } 

      } 

回答

2

您可以使用会话[]保持最后插入ID:

public function add_teacher_subject() { 
    $date = new DateTime("now"); 
    $data = array(
     'teacher_id' => $this->input->post('teacher'), 
     'user_id' => $this->session->userdata['user_id'], 
     'created_at' => $date->format('Y-m-d H:i:s') 
    ); 

    $this->db->insert('student_surveys', $data); 
    $insert_id = $this->db->insert_id(); 
    $newdata = array('insert_id' => $insert_id); 
    $this->session->set_userdata($newdata); 
    return $insert_id; 
} 

public function survey_fill() { 
    $insert_id = $this->session->userdata('insert_id'); 
    if ($this->input->post('answer')) { 
     $answers = $this->input->post('answer'); 
     if (null !== ($this->input->post('submit'))) { 
      $date = new DateTime("now"); 
      foreach ($answers as $question_id => $answer) { 
       $data = array(
        'user_id' => $this->session->userdata['user_id'], 
        'question_id' => $question_id, 
        'answer' => $answer, 
        'student_survey_id' => $insert_id 
       ); 

       $this->db->insert('survey_answers', $data); 
      } 
     } 
    } 
} 
+1

谢谢您的回答!我试着用第一种方法,但我得到了:'student_survey_id'列不能为空,survey_fill()中的$ insert_id为空。 –

+0

因此,您正在使用codeigniter数据库自动功能进行插入/更新。 –

+1

你可以保存在其他地方像$ config文件或定义一个静态库来保持insert_id。 –

相关问题