Я пытаюсь проверить управление транзакциями в codeigniter. Ниже метод является функцией в классе модели. Если update_user_company_id метод возвращает false, метод-обертка save_user_and_company также возвращается. В этом случае, потому что метод возвращается до того, как достигнет
$this->db->trans_complete();
вызов, изменения сделаны save_company а также delete_company_requests методы откатились. Это то, что я хочу.
Но я хочу узнать, что вместо того, чтобы звонить
$this->db->rollback();
Я прямо возвращаюсь из метода.
Этот подход безопасен?
Есть ли вероятность, что я могу столкнуться с блокировкой или какой-либо другой проблемой в будущем?
function save_user_and_company($user, $company_request) {
$result[STATU] = ERROR;
$this->db->trans_start();
$company = $this->companies_dao->save_company($company_request->company_name, $user->id);
if (!$company) {
$result[MESSAGE] = COMPANY_SAVE_ERROR;
return $result;
}
$company_request_result = $this->company_requests_model->delete_company_requests($company_request->id);
if (!$company_request_result) {
$result[MESSAGE] = COMPANY_REQUEST_DELETE_ERROR;
return $result;
}
$user_update = $this->users_dao->update_user_company_id($user->id, $company->id);
if (!$user_update) {
$result[MESSAGE] = USER_UPDATE_ERROR;
return $result;
}
$this->db->trans_complete();
$result[STATU] = SUCCESS;
$result[MESSAGE] = SUCCESSFUL;
return $result;
}
Заранее спасибо!
Ты пробовал вот так ….
Следующий код возвращает TRUE
если транзакция завершается успешно. В противном случае rollback
Ваша транзакция и возврат FALSE
Надеюсь, это вам очень поможет ..
function save_user_and_company($user, $company_request) {
$this->db->trans_begin(); //Begins your transaction
//Performs the transaction operations
$company = $this->companies_dao->save_company($company_request->company_name, $user->id);
$company_request_result = $this->company_requests_model->delete_company_requests($company_request->id);
$user_update = $this->users_dao->update_user_company_id($user->id, $company->id);
//Check whether transaction fails
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
$status = FALSE;
}
else
{
$this->db->trans_commit();
$status = TRUE;
}
return $status;
}
Других решений пока нет …