2012-09-10 46 views
0

我创建了一个crud系统。在这里我有一个主要模型,然后依赖于细节模型。因此,它们是多行(有时大于100)输入与父模型相关的详细模型。所有操作通过网格处理(内联编辑)。因此,通过单个请求(通过数据库进行逻辑检查)执行创建,更新和删除操作。控制器中的数据库事务

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

回答

0

至于我的最后一条评论,将代码移到父模型是我现在的解决方案。所以我认为我应该标记这个答案。

0

您是否在使用AJAX进行更改或者是否依赖手动表单提交?

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

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

您可以保留用户更改每行的列表服务器端。你不需要跟踪所有的行,因为如果他们不改变任何东西,你不需要保存任何东西。

0

你在模型中使用什么样的方法?你的模型是否知道他们自己的持久性(你是否像$user->save()那样做),或者你在做更多的数据映射器方法($userManager->save($userEntity))?后者使事务处理更容易。

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

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

+0

在Zend 2 Framework中,我们在模型的SaveModule方法中使用了类似 $ this-> update($ array,array('id'=> $ module_details-> id))。所以看起来像一个混合的方法比较Zend 1. –

+0

保存后,我刚刚将我的细节模型保存方法从控制器调用到父模型。看起来这只是简单的解决方案,我有:)。 –