CakePHP hasAndBelogsToMany使用save()与saveAll()

时间:2008-09-29 05:40:56

标签: cakephp entity-relationship has-and-belongs-to-many

我正在使用一个非常内在的数据库和CakePHP应用程序,到目前为止我的多模型视图和控制器工作正常。我有一个单独的表(Entity),它在其他几个表上有id作为外键entity_id

有些表是一对一关系(如Company只有一个Entity),有些是一对多(Entity可以有几个Addresses)等等

我不会/不能更改数据库模型,所以这就是结构。

我一直在使用saveAll()来保存这些表上的数据,输入名称如下:

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

我的保存工作正在完成所有艰苦工作,BEGIN TRANSACTION,所有INSERT和最终COMMIT ......

但是现在我创建了一个n到n关系的EntityCategory,并在模型中创建了完整的HABTM关系。

当我save()但它只是HABTM关系时它会起作用,并且当我使用saveAll()时(除了HABTM关系之外)它会保存everthing。

我错过了什么吗?我如何正确地工作?我今天使用以下代码:

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

saveAll()将所有数据保存在多个表中,将ID保存在Entity->id中,save()保存HABTM关系,但我不确定它是否正确或者,如果我改变一些结构/模型,它会给我带来麻烦。

这是使用它的最佳方式吗?是否有正确的方法来保存CakePHP中的关系?您的经验/知识可以告诉我什么?

2 个答案:

答案 0 :(得分:1)

如果您下载nightly

,则会修复此问题

小心,但其他可能会破坏。

答案 1 :(得分:0)

saveAll()和HABTM关联的问题是已知的CakePHP issue,并且从1.2 RC2开始尚未解决。

根据CakePHP cookbook的说法,保存相关模型数据的最佳实践就是最佳实践:

  

“在使用相关模型时,重要的是要意识到保存模型数据应始终由相应的CakePHP模型完成。如果要保存新帖子及其关联的注释,那么您将同时使用Post和Comment模型在保存操作期间。“

但是,使用saveAll()和save()应该可行,而恕我直言是一种更灵活/通用的解决方案。