Как получить последний вставленный идентификатор, а затем назначить его глобальной переменной

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

Я использую callback_after_insert в дальнейшем:

$crud->callback_after_insert(array($this, '_callback_get_lastInsertID'));

function _callback_get_lastInsertID($post_array,$primary_key) {
   $this->lastInsertedId = $primary_key;
}

Затем, когда использовать $this->lastInsertedId чтобы получить его значение, но я не нахожу никаких сохраненных значений.

function featured_ad_offer() { 
    echo $this->lastInsertedId; 
    @$data['content'] .= $this->load->view('featured_ad_offer', '', true); 
    $this->load->view('index', $data); 
}

Есть сообщение об ошибке, скажем Undefined property: Content::$lastInsertedId

Теперь, как это сделать?

3 ответа

Может быть, вы можете использовать это, чтобы получить последний вставленный идентификатор

$this->db->insert_id();

сохранить его в сеансе

$this->load->library('session');
$this>session->set_userdata('last_inserted_id');

и использовать эту переменную сеанса в других местах

$last_inserted_id = $this->session->userdata('last_inserted_id');

желаю этой помощи:D

Решение, которое вам нужно, может быть легко решено с помощью сеансов Codeigniter. Например, вы можете сделать следующее:

$crud->callback_after_insert(array($this, '_callback_get_lastInsertID'));

function _callback_get_lastInsertID($post_array,$primary_key) {
   $this->session->set_userdata('last_insert_id', $primary_key);
}

Убедитесь, что у вас загружен класс сеанса первым. Лучший способ сделать это - иметь библиотеку сессий в автозагрузке.

Теперь, чтобы снова вызвать last_insert_id, вы можете просто сделать это, вызвав:

echo $this->session->userdata('last_insert_id');

Так что в вашем примере вы можете просто сделать:

function featured_ad_offer() { 
    echo $this->session->userdata('last_insert_id'); 
    @$data['content'] .= $this->load->view('featured_ad_offer', '', true); 
    $this->load->view('index', $data); 

}

Пожалуйста, попробуйте объявить вашу переменную в классе (при условии, что обе функции находятся в одном классе) сразу после "объявления" самого класса, т.е.

class Blog extends CI_Controller {
    private $lastInsertedId = NULL;

    public function fcn1() {$this->lastInsertedId = 3.14;}
    public function fcn2() {var_dump($this->lastIndertedId);}

}

Если вы действительно хотите использовать его как global variable Вы должны объявить это в CI_Controllerили еще лучше создать файл в /core/Public_Controller это расширяет CI_Controller и пусть все ваши контроллеры будут расширены не CI_Controller но Public_Controller поэтому вы можете легко объявить переменные, которые являются "глобальными".

Для получения дополнительной информации о расширении используйте это руководство Phil.

Если у вас есть проблемы, вот ссылка на руководство пользователя.

Есть еще один вариант (не рекомендуется!) Класса конфигурации,

$this->config->set_item('item_name', 'item_value'); //setting a config value
$this->config->item('item name'); //accesing config value
Другие вопросы по тегам