CakePHP hasAndBelogsToMany使用save()与saveAll()

时间:2020-03-06 14:51:42  来源:igfitidea点击:

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

有些表是一对一的关系(就像"公司"是一个"实体"),有些表是一对多的关系("实体"可以有多个"地址"),依此类推。

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

我一直在使用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关系。

我想念什么吗?我如何使它正常工作?我今天正在使用以下代码:

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烹饪手册,保存相关模型数据的最佳实践已广受欢迎:

"When working with associated models, it is important to realize that saving model data should always be done by the corresponding CakePHP model. If you are saving a new Post and its associated Comments, then you would use both Post and Comment models during the save operation."

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

如果我们每晚下载此问题,此问题将得到解决。

但是请小心,其他可能会损坏。