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

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

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

我一直在使用 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()时它保存了everthing(只是和之前一样)除了 HABTM 关系。

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

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

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

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

有帮助吗?

解决方案

如果您每晚下载 ,则会解决此问题。

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

其他提示

saveAll()和HABTM关联的问题是已知的CakePHP 问题,并且自1.2 RC2起未解决。

根据CakePHP cookbook

  

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top