用于案例嵌套交易的案例

问题描述 投票:-1回答:1

我有一个需要进行交易的项目,因为我有3个相互依赖的实体。租户,组织,用户。首先,我从一个存储库中的单个事务开始,然后我发现了关于理论嵌套事务的信息。我不太了解它们在学说中的作用以及用例是什么。您能比他们的文档更详细地解释我的用例是什么,如果适用于我的情况?

在我的情况下,用户需要组织ID,租户ID,而组织需要租户ID。如果创建时其中一个实体因某种动机而失败,则所有三个实体都将失败并回滚。

LE:我正在使用带有symfony的学说。

来自嵌套事务的文档示例:

<?php
// $conn instanceof Doctrine\DBAL\Connection
$conn->beginTransaction(); // 0 => 1, "real" transaction started
try {

    ...

    // nested transaction block, this might be in some other API/library code that is
    // unaware of the outer transaction.
    $conn->beginTransaction(); // 1 => 2
    try {
        ...

        $conn->commit(); // 2 => 1
    } catch (\Exception $e) {
        $conn->rollBack(); // 2 => 1, transaction marked for rollback only
        throw $e;
    }

    ...

    $conn->commit(); // 1 => 0, "real" transaction committed
} catch (\Exception $e) {
    $conn->rollBack(); // 1 => 0, "real" transaction rollback
    throw $e;
}
php symfony doctrine-orm doctrine symfony4
1个回答
0
投票

[如果您正在使用Doctrine ORM(您在问题中没有透露),那么我不明白您为什么在这种情况下使用事务。

如果您定义实体之间的关联,例如

/** @Entity */
class User
{

 /**
 * @ManyToOne(targetEntity="Organisation", nullable=false)
 */
private $organization;

这已经确保了用户实体仅在设置组织时才会保留。如果不是这种情况,则会引发错误,并且该错误不会持续或回滚。

因此,如果您能够以这种方式定义关联,则无需进行交易。

仅在您无法定义这种技术性关联链的情况下才需要进行交易。例如。当组织和用户需要一起创建但它们之间没有技术关联时。

© www.soinside.com 2019 - 2024. All rights reserved.