我创建了一个crud系统。在这里,我有一个主要模型,然后依赖细节模型。因此,它们是多行(有些时候> 100)输入到与父模型相关的细节模型中。所有操作都通过网格处理(内联编辑)。因此,通过单个请求(通过DB进行逻辑检查)执行创建,更新,删除操作。
现在我正在考虑将DB事务用于整个操作。但我很困惑,我如何使用相同的结构实现这一点。我已经建议将我的所有代码移动到一个模型,因此可以在那里应用事务。但我想,如果可以使用任何其他方法来保留主要和细节模型代码的分离。
答案 0 :(得分:0)
您是使用AJAX进行更改还是依赖于手动表单提交?
您可以使用所谓的UnitOfWork模式。
保存用户对网格的每一行所做的任何更改,但实际上并未将它们提交给数据库。然后,在页面上放置一个基本保存按钮,使您的服务器实际通过事务提交所有更改。
您可以保留用户更改的每一行的列表服务器端。您不需要跟踪所有行,因为如果它们没有更改任何内容,则无需保存任何内容。
答案 1 :(得分:0)
您在模型中使用了哪种方法?您的模型是否了解自己的持久性(您是否执行$user->save()
之类的操作),或者您正在执行更多数据映射器方法($userManager->save($userEntity)
)?后者使事务处理变得更加容易。
如果您正在执行活动记录类型的模式($user->save()
),最好的办法可能就是手动获取数据库连接并管理控制器中的事务。
如果你正在做数据映射器的东西,你有更多的选择,包括完成整个工作单元的实现。
答案 2 :(得分:0)
至于我上次的评论,将代码移动到父模型是我现在的解决方案。所以我想我应该标记这个帖子。