CakePHP- 保存相关模型数据

Posted

技术标签:

【中文标题】CakePHP- 保存相关模型数据【英文标题】:CakePHP- Saving Related Model Data 【发布时间】:2014-02-01 10:47:25 【问题描述】:

好的,假设有两个关联模型,其中主模型与另一个模型具有 hasMany 关系。前捐赠者有很多捐赠。我已经阅读了 cake 的大部分文档,并且我也注意到了这一点(来自文档):

'在使用关联模型时,重要的是要意识到 保存模型数据应始终由相应的 Cakephp 完成 模型。如果您要保存新帖子及其相关评论,则 您将在保存操作期间同时使用 Post 和 Comment 模型'(http://book.cakephp.org/2.0/en/models/saving-your-data.html)

正如@burzum 在我的另一个问题上所指出的那样:CakePHP - Controller or No Controller?,我仍在努力决定哪种方法最有效。

以前面提到的“捐赠者和捐赠”为例,假设我们希望用户向捐赠者添加捐赠。因此,对于用户添加捐赠,需要查看捐赠者,访问以下类型的 url:'domain/donors/view/1',这意味着用户当前正在查看 id 为 1 的捐赠者。然后在该视图中,让我们假设有一个按钮允许用户添加捐赠。现在从我被告知和读到的内容来看,add(donation) 动作应该属于donationsController。

让我们也假设 add(donation) 操作有它自己的视图。所以如果我在 'domain/donors/view/1' 用户被重定向到 'domain/donations/add/donor_id:1'然后使用检索捐助者的ID $this->request->params['named']['post_id'] 并像这样设置为FK: `$this->request->data['Donation']['donor_id'] = $id;

但我有一种直觉告诉我,这不是正确的方法,当有关联的模型时,从一个控制器跳到另一个控制器感觉像是不好的做法。

对此有何见解?是否有可以应用或遵循的一般经验法则?可以将用户从donorsController 的视图操作重定向到donationsController 的添加操作吗?

提前致谢!

【问题讨论】:

太棒了!捐赠者和捐赠的定义是什么? @Anubhav,你对捐赠者和捐赠的定义是什么意思?捐赠者代表捐赠者记录的 CRUD,其中存储捐赠者信息,如姓名、姓氏、捐赠计数等。捐赠与捐赠者相关联,血库工作人员将能够为注册捐赠者添加捐赠记录(捐赠者表)。谢谢 嗯,只有一条经验法则可以让您的代码保持干净和易于理解。捐赠者和捐赠控制者必须具有各自的功能。不要混合它们,休息一切都很好,你将在未来 1 -2 年内面临多次迭代,你会意识到那时你将能够理解当时需要什么。 @Anubhav 因此,如果我理解正确,每个控制器都必须有其自己的操作,并且只要检索到的数据“属于”该控制器的模型,那么最好使用该控制器并且它的视图代表该数据!队友的欢呼声!你帮了大忙! 【参考方案1】:

据我所知,您的方法没有错,从视图链接其他控制器是正常的。

但是我更喜欢(这是我的经验法则,我不确定是否是“最佳实践”)让用户直接从“主”模型。我在我的应用程序中使用了这种方法,主要考虑用户体验(不知道是不是你的情况)。因此,如果您处于捐赠者的编辑操作中,则用户可以在相应的视图中添加捐赠并将其发送到捐赠者的编辑操作中。如果请求数据格式正确,您可以在此处保存关联的模型:

data['Donor'] = array('id'=> XX);
data['Donation'] = array('id' => YY, 'amount' => blabla,...);
$this->Donor->save(data);

这将尊重 MVC(没有丑陋的 ClassRegistry::Load ... )并保持代码简单,避免从一个控制器跳转到另一个控制器。 只是我的看法:D

问候。

【讨论】:

Riccardo Barbotti,谢谢你。这也是我最初的想法,尤其是在用户体验方面,是的!我很重视你的意见!最好的问候

以上是关于CakePHP- 保存相关模型数据的主要内容,如果未能解决你的问题,请参考以下文章

Cakephp:选择登录后要保存的数据

CakePHP 2.1 - 模型关联 - 保存和查找

CakePHP 保存非常深的关联模型

CakePHP 如何在一个视图中显示来自三个相关模型的数据?

CakePHP 2.0 添加相关数据失败,缺少数据库表

cakePHP - 有条件的保存,可以吗?