控制器中的数据库事务

时间:2012-09-10 14:31:45

标签: php transactions zend-framework2

我创建了一个crud系统。在这里,我有一个主要模型,然后依赖细节模型。因此,它们是多行(有些时候> 100)输入到与父模型相关的细节模型中。所有操作都通过网格处理(内联编辑)。因此,通过单个请求(通过DB进行逻辑检查)执行创建,更新,删除操作。

现在我正在考虑将DB事务用于整个操作。但我很困惑,我如何使用相同的结构实现这一点。我已经建议将我的所有代码移动到一个模型,因此可以在那里应用事务。但我想,如果可以使用任何其他方法来保留主要和细节模型代码的分离。

3 个答案:

答案 0 :(得分:0)

您是使用AJAX进行更改还是依赖于手动表单提交?

您可以使用所谓的UnitOfWork模式。

保存用户对网格的每一行所做的任何更改,但实际上并未将它们提交给数据库。然后,在页面上放置一个基本保存按钮,使您的服务器实际通过事务提交所有更改。

您可以保留用户更改的每一行的列表服务器端。您不需要跟踪所有行,因为如果它们没有更改任何内容,则无需保存任何内容。

答案 1 :(得分:0)

您在模型中使用了哪种方法?您的模型是否了解自己的持久性(您是否执行$user->save()之类的操作),或者您正在执行更多数据映射器方法($userManager->save($userEntity))?后者使事务处理变得更加容易。

如果您正在执行活动记录类型的模式($user->save()),最好的办法可能就是手动获取数据库连接并管理控制器中的事务。

如果你正在做数据映射器的东西,你有更多的选择,包括完成整个工作单元的实现。

答案 2 :(得分:0)

至于我上次的评论,将代码移动到父模型是我现在的解决方案。所以我想我应该标记这个帖子。