【问题标题】:Doctrine Transactions Boundary教义交易边界
【发布时间】:2015-09-28 09:34:15
【问题描述】:

我正在使用 Doctrine ORM 2.5。我想知道在尝试插入\更新\删除实体时是否需要在$entityManager->beginTransaction()$entityManager->commit() 中包装除$entityManager->flush() 以外的任何内容。因为在Doctrine's Docs 中,像$user = new User() 这样的其他语句也被包裹在事务调用中。

【问题讨论】:

    标签: php symfony doctrine-orm transactions


    【解决方案1】:

    不,在 beginTransaction 和 commit 语句中只包含 flush() 应该没问题(当然,只要您之前对所有操作使用相同的实体管理器)

    但是,如果这是您唯一的“调用”,为什么还要标记您的事务边界? 那么你想通过设置事务边界来达到什么目的呢?

    【讨论】:

    • 用例是:我有多个实体管理器,所有的更改都应该回滚,以防其中一个遇到错误。
    • 你的声明有任何来源吗?
    • 这就是为什么我写了'只要你使用同一个实体管理器',我不能对涉及多个实体管理器的行为说任何有效的东西。来源是官方的原则文档(请参阅您自己的链接),告诉“flush”正在隐式启动事务并执行 UnitOfWork 中的任何语句(按其特定顺序等),如果发生任何事情,则回滚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多