【问题标题】:How can I use insert_id from one method in model in another method in the same model如何在同一模型中的另一种方法中使用模型中的一种方法的 insert_id
【发布时间】:2015-07-11 15:22:32
【问题描述】:

insert_id 有问题。我正在使用 CodeIgniter。我有一个方法,我在其中插入一些值并在其中返回

$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);

                }

            }

【问题讨论】:

    标签: codeigniter insert-id


    【解决方案1】:

    您可以使用 SESSION[] 来保留最后插入 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);
                }
            }
        }
    }
    

    【讨论】:

    • 感谢您的回答!我尝试了第一种方法,但我得到:列 'student_survey_id' 不能为空,survey_fill() 中的 $insert_id 为空。
    • 所以您正在使用 codeigniter 数据库自动函数进行插入/更新。
    • 你可以把它保存在其他地方,比如 $config 文件,或者定义一个静态库来保存 insert_id。
    • 你已经在模型中写了如何做到这一点,但它应该如何在配置文件中定义?
    • 只需在“application/config/config.php”文件中添加这行代码,它就会被添加到您的配置变量中:$config['_insert_id_teacher'] = '';
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2014-03-28
    • 2022-11-11
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多