Доктрина множественных / сцепленных транзакций - Symfony - PullRequest
0 голосов
/ 08 мая 2018

Я хочу совершить две последовательные транзакции с Doctrine в Symfony 3. Первая транзакция в порядке, но вторая, похоже, работает, потому что $ insertRows всегда получает 1 и явно не выполняет откат, но когда выполняется фиксация, кажется, что эта последняя вставка не применяется. Если я ищу строку в реальной базе данных не там.

Я оставляю здесь пример того, что я делаю.

    $db->beginTransaction();
    $db->setAutoCommit(false);

    //the first transaction it's to update a register with another num
    try{
        $num = $this->getNum($params);
        if(!($num > 0)){ $db->rollBack();}

        $updatedRows = $this->updateNum($params);
        if($updatedRows === 0){ $db->rollBack();}

        $db->commit();

    } catch (\Exception $e) {
        $db->rollBack();
        throw $e;
    }
    //until here is ok. I can see the changes in the database


    //this second transatcion I don't know why is not working.
    $db->beginTransaction();
    $db->setAutoCommit(false);
    try{
        $insertedRows = $this->insertNewRegister($params);
        if($insertedRows === 0){ $db->rollBack();}
        //the insertedRows is equal to 1 if I do a dump here, so it seems is inserting this new row 
        //but after the commit if I check this new row in the database is not there

        $db->commit();

    } catch (\Exception $e) {
        $db->rollBack();
        throw $e;
    }

Кто-нибудь знает, что я делаю не так? Возможно, любой может показать мне пример двух последовательных транзакций.

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете решить проблему с удалением второго звонка

$db->beginTransaction();

Проблема с вашим вторым звонком

$db->beginTransaction();

- это когда вы устанавливаете setAutoCommit(false) после $db->commit();, когда новая транзакция автоматически открывается, поэтому вам не нужно открывать новую транзакцию.

Вы можете прочитать документацию doctrine-project .

...