Что происходит со вставленными записями, когда функция модели возвращается до того, как достигнет отката или завершения?

Я пытаюсь проверить управление транзакциями в 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;
}

Заранее спасибо!

0

Решение

Ты пробовал вот так ….

Следующий код возвращает 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;
}
0

Другие решения

Других решений пока нет …