代码之家  ›  专栏  ›  技术社区  ›  Fernando Barrocal

cakephp hasandbelognomany使用save()与saveall()。

  •  1
  • Fernando Barrocal  · 技术社区  · 16 年前

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

    有些桌子是一对一的关系(比如 Company 是一 实体 )有些是一对多( 实体 可以有几个 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 S与最后 COMMIT

    但现在我创造了一个 EntityCategory 这是一个n对n关系,并创建了完整的 HABTM 模型内部的关系。

    当我工作的时候 save() 它只是 哈普姆 关系,当我使用它时它可以节省所有的东西 萨维尔() (和以前一样)除了 哈普姆 关系。

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

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

    这个 萨维尔() 将所有数据保存在多个表中,将ID保存在 Entity->id 以及 保存() 拯救 哈普姆 关系,但我不确定它是否正确,或者如果我改变一些结构/模型,它是否会给我带来问题。

    这是最好的使用方法吗?有没有 对的 如何在cakephp中保存这种关系?你的经验/知识能告诉我什么?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Chris Hawes    16 年前

    如果您下载 nightly .

    不过要小心,可能会有别的东西坏掉。

        2
  •  0
  •   Jacob    16 年前

    saveall()和habtm关联的问题是一个已知的cakephp issue ,截至1.2 RC2尚未解决。

    根据cakephp,fas是保存相关模型数据的最佳实践。 cookbook :

    “在处理相关模型时,必须认识到保存模型数据应该始终由相应的cakephp模型完成。如果要保存新的日志及其关联的注释,则在保存操作期间将同时使用日志和注释模型。”

    但是,使用saveall()和save()应该可以,imho是一个更灵活/通用的解决方案。