Как получить последний вставленный идентификатор, а затем назначить его глобальной переменной
Я хочу получить последний вставленный идентификатор, а затем назначить его глобальной переменной, чтобы использовать его позже.
Я использую 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