я не могу получить последний идентификатор вставки из базы данных в codeigniter - PullRequest
0 голосов
/ 01 января 2019

Я хочу создать идентификатор в CodeIgniter, например PTGS-1, где 1 - это столбец с автоматическим приращением, а PTGS - из созданной мной функции.

Я создаю 2 столбца, 1только для автоинкремента и 1 для пользовательского идентификатора PTGS-1.и каждый раз, когда мне нужно вставить данные, столбец с пользовательским идентификатором всегда возвращает PTGS-0, он не получит идентификатор последней вставки .

это моя функция для пользовательского идентификаторав модели

public function custIdPetugas() {

    $prefix = "PTGS" . "-";
    $lastid = $this->db->insert_id();

    $customid = $prefix.$lastid;

    return $customid;

}

и эта функция в модели для обработки пользовательского ввода

public function simpan() {

    $custom_id = $this->custIdPetugas();
    $post = $this->input->post();

    $data = array(
        'custom_id' => $custom_id,
        'nama_petugas' => $post['nama'],
        'username' => $post['uname'],
        'password' => password_hash($post['pword'], PASSWORD_DEFAULT),
        'tgl_lahir' => $post['tgllahir'],
        'alamat' => $post['alamat'],
        'no_telpon' => $post['notelpon']
    );

    $this->db->insert($this->tbl, $data);

}

и контроллера

public function tambahPetugas() {

    $petugas = $this->PetugasModel;
    $validation = $this->form_validation;
    $validation->set_rules($petugas->rules());

    if($validation->run()) {

        $petugas->simpan();
        $this->session->set_flashdata('berhasil', 'Data berhasil ditambah!');

    }

    $this->load->view('petugas/petugas-tambah');

}

проблема только с этим пользовательским идентификатором,Я могу аккуратно вставить данные из формы в базу данных, но пользовательский идентификатор всегда возвращает 0.

спасибо!

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Я думаю, что проблема в вашей insert_id() функции.Вам нужно позвонить по последнему номеру из вашего custom_id, а затем увеличить его.Итак, сначала, чтобы позвонить по последнему номеру, я сохранил его в функции под названием insert_id:

public function insert_id()
{       
    //here is query for called max id, because u have 4 character before the number so use right instead max. 
    $sql= sprintf("SELECT MAX(RIGHT(custom_id,1)) AS key FROM your_tables_name"); 
    $qry= $this->db->query($sql);
    $row= $qry->row();
    //here is checking if the record is null
    $record= $row->key;
    if ($record== null) {
        $record = 0;
    }
    $record+= 1;

    return $record
}
0 голосов
/ 01 января 2019

Поместите код для получения последнего идентификатора вставки после вставки записи в БД.

$this->db->insert($this->tbl, $data);
$custom_id = $this->custIdPetugas();

Но если вы хотите получить перед вставкой записи, используйте это.Предположим, что ваш последний идентификатор вставки равен 99, и в ответ вы получите 100

SELECT AUTO_INCREMENT
  FROM  INFORMATION_SCHEMA.TABLES
  WHERE TABLE_SCHEMA = 'database_name'
  AND   TABLE_NAME   = 'table_name';

Другой способ получить идентификатор последней вставки перед вставкой записи.

$last_id = SELECT MAX(id) FROM table;

Увеличение на 1 для следующегозапись

модель

public function custIdPetugas() {

    $prefix = "PTGS" . "-";
    //Suppose last ID is 23 

    $lastid = $this->db->query('SELECT MAX(id) as max_id FROM table')->row();

    //$lastid = 23; Increment it by one for next unique value
    $customid = $prefix.$lastid->max_id;

    return $customid;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...