laravel вложенная дБ транзакция не фиксирует - PullRequest
0 голосов
/ 29 марта 2020

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

beginTransaction();

error_message.=function A();
error_message.=function B();

if (empty error_message){
    commit(); //commit table B and C
} else {
    rollback();
}
function A(){
    beginTransaction();
    update table A //wants to commit table A immediately
    commit();
    //do some stuff
    update table B
    if(error) {
        return error_message
    } else {
        return null
    }
}

function B(){
    beginTransaction();
    update table A //wants to commit table A immediately
    commit();
    //do some stuff
    update table C
    if(error) {
        return error_message
    } else {
        return null
    }
}

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

я думаю, что вы пропустите rollback () в функции записи a () или b ().

rollback()

и dbtransaction не запускается, когда вы пропускаете 1 метод из 3

1 beginTransaction()//start transection
2 commit()//commit your transaction
3 rollback()//rollback your transaction 

без отката beginTransaction не работает.

и я думаю, что вы пропустите () после пустого

0 голосов
/ 29 марта 2020

при вызове beginTransaction (); перед функцией будет два beginTransaction();, первый находится вне функции, а второй - внутри функции.

beginTransaction();
error_message.=function A();
error_message.=function B();

Поместите вашу beginTransaction (); ниже вызова функции.

error =0;

error_message = function A();
if(empty(error_message)){
   error =1;
}

error_message = function B();
if(empty(error_message)){
   error =1;
}

beginTransaction();
if (error){
    commit(); //commit table B and C
} else {
    rollback();
}
...