2016-05-06 2 views
-1

У меня возникли проблемы с Codigniter 3 last insert_id.Codeigniter insert_id() странный вопрос

Я хочу получить последнее вставленное org_id. Но по ошибке я ставлю следующую команду, чтобы получить последний вставленный идентификатор после запроса для регистрации транзакции.

  // grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  

      // create preset levels 
      $this->preset_levels($insert_org_id); 

Поэтому он правильно вернул последний вставленный идентификатор из таблицы журналов. Экстракт контроллера ниже:

  // send org_data to model for db input 
      $this->org_model->add_org($org_data);         

      // audit log 
      // serialize data array for audit log 
       $serialised_array = serialize($org_data);  

       // specify audit log title 
       $log_title = 'Create Organisation';  

       // send data to audit log model 
       $this->audit_model->add_log($serialised_array,$log_title);  
      // end audit log entry 

      **// grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  
      // create preset levels 
      $this->preset_levels($insert_org_id);** 

Итак, я думал, что хорошо, плохо только двигаться так:

  // grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  

      // create preset levels 
      $this->preset_levels($insert_org_id);     

после команды добавить орг см экстракт контроллера ниже:

  // send org_data to model for db input 
      $this->org_model->add_org($org_data); 

      **// grab org_id from insert 
      $insert_org_id = $this->db->insert_id();  
      // create preset levels 
      $this->preset_levels($insert_org_id);**             

      // audit log 
      // serialize data array for audit log 
       $serialised_array = serialize($org_data);  

       // specify audit log title 
       $log_title = 'Create Organisation';  

       // send data to audit log model 
       $this->audit_model->add_log($serialised_array,$log_title);  
      // end audit log entry  

Но он не возвращает никакой ценности? Вставляемый org_id не является числовым, это может быть проблемой?

Обе вставки очень простые вставки базы данных, смотрите ниже: метод

Добавить организацию в org_model

// add new organisation 
public function add_org($org_data) { 
    $this->db->insert('organisations', $org_data); 
} 

И добавить метод войти audit_model

// add audit log entry 
public function add_log($serialised_array,$log_title) {  

    // capture current date & time for audit log 
    date_default_timezone_set('Europe/London'); 
    $date = date('Y-m-d H:i:s'); 

    // build array of log data 
    $log_data = array(
     'log_datetime' => $date, 
     'log_org_id' => $this->session->userdata('org_id'), 
     'log_user_id' => $this->session->userdata('user_id'), 
     'log_user_name' => $this->session->userdata('username'), 
     'log_title'  => $log_title, 
     'log_detail' => $serialised_array 
    ); 
    // insert log data to db 
    $this->db->insert('audit_log', $log_data); 

} 

Так почему же одна работа а другой нет? Что другое?

ответ

2

insert_id() должен вернуть последнее значение автоматического прироста, сгенерированное для данного соединения. Если org_id не является числовым полем, он не может быть автоматическим приращением, поэтому insert_id() не вернет для него никакого значения.

+0

Хорошо, что имеет смысл. Есть ли простая команда, чтобы получить последнее значение не numeric non auto increment insert? – frobak

+0

Нет такой команды (ofc вы всегда можете сделать выбор), так как если столбец не увеличивается автоматически, в столбце автоматически не присваивается значение, кроме значения по умолчанию. Вы должны сгенерировать нечисловой идентификатор в вашем php или sql-коде и явно вставить его в таблицу. – Shadow

Смежные вопросы