У меня есть два сложных объекта PHP, каждый из которых содержит данные в нескольких таблицах MySQL.
Иногда мне просто нужно удалить один объект A из базы данных, и для этого требуется 3 оператора SQL.
Иногда мне нужно удалить один объект B из базы данных, который принимает 4 оператора SQL, а также должен найти и удалить все объекты A, которыми владеет объект B.
Итак, внутри функции delete_A () я выполняю эти операторы внутри транзакции. Внутри функции delete_B () я хочу выполнить одну большую большую транзакцию, которая охватывает действия внутри delete_A (). Если весь атом удаления B не удался, мне нужно восстановить все его A в откате.
Как обновить определение delete_A (), чтобы открыть только новую транзакцию , если уже не запущена транзакция большего размера.
Я ожидал, что смогу сделать что-то подобное, но атрибут autocommit
, похоже, не изменится на beginTransaction()
function delete_A($a){
global $pdo;
$already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
if(!$already_in_transaction){
$pdo->beginTransaction();
}
//Delete the A
if(!$already_in_transaction){
$pdo->commit();
}
}
function delete_B($b){
global $pdo;
$pdo->beginTransaction();
foreach($list_of_As as $a){
delete_A($a);
}
$pdo->commit();
}