Използване на
transactions
означава поддръжка на бази данни за безопасно вмъкване на данни. Така че в Codeigniter пишем всички функции, свързани с базата данни в Model не в Controller. . И във втория си код (който не работи) сте посочили модел там.(utils
). Толкова просто, сигурен съм, че това няма да работи. Тъй като това не е вмъкване на данни с паралелни модел и контролер. Транзакцията трябва да бъде кодирана в Модела (Ще напиша в Модел в моя отговор ).
Заредете и тези неща
- Библиотека с бази данни
- Клас на модела
- Помощник за URL адреси
- Сесия
Предположения
Във вашия код сте използвали $data
и $test
като масив. Така че предполагам, че има два масива за вмъкване и актуализиране на данни.
Вашите набори от данни
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$id = 007;
$test = array(
'title' => $title,
'name' => $name,
'date' => $date
);
Вашият код
$this->db->trans_start(); # Starting Transaction
$this->db->trans_strict(FALSE); # See Note 01. If you wish can remove as well
$this->db->insert('table_name', $data); # Inserting data
# Updating data
$this->db->where('id', $id);
$this->db->update('table_name', $test);
$this->db->trans_complete(); # Completing transaction
/*Optional*/
if ($this->db->trans_status() === FALSE) {
# Something went wrong.
$this->db->trans_rollback();
return FALSE;
}
else {
# Everything is Perfect.
# Committing data to the database.
$this->db->trans_commit();
return TRUE;
}
Бележки
- По подразбиране Codeigniter изпълнява всички транзакции в строг режим. Когатострогият режим еактивиран , ако изпълнявате няколко групи транзакции, ако една група не успее, всички групи ще бъдат върнати обратно. Ifstrict режимът е деактивиран , всяка група се третирасамостоятелно , което означава, че неуспехът на една група няма да засегне други .