Cfwheels -删除未使用的组合键对



我有一个使用复合键的嵌套属性的问题。

当我编辑一个模型,有多个嵌套属性的实例(与复合键),并希望更新它有更少的空白,cfWheels不删除那些不再使用,并保持旧的值。是否有一种方法可以强制删除这些而不调用嵌套模型上的delete ?

我一直在做的是删除所有嵌套的属性,然后update()创建所需的记录,但最大的问题是,当我在两者之间的代码失败时,它只是删除项目,如你所知,这可能非常非常糟糕。

init呼叫nestedProperties()时,尝试添加allowDelete选项:

nestedProperties(association="comments", allowDelete=true);

然后,如果该集合中的模型有一个名为_delete的属性被设置为true, CFWheels将删除该记录。

我不确定你的模型,因为你没有在你的问题中包括任何细节,但是你可能会运行一个beforeValidationOnUpdate回调,检查嵌套模型的标准,并在需要删除记录时设置_delete = true

例如:

// Post.cfc
component extends="Model" {
  function init() {
    hasMany("comments");
    nestedProperties(association="comments", allowDelete=true);
    beforeValidationOnUpdate("removeBlankComments");
  }
  private function removeBlankComments() {
    if (StructKeyExists(this, "comments") && IsArray(this.comments)) {
      for (local.i = 1; local.i < ArrayLen(this.comments); local.i++) {
        if (!Len(this.comments[local.i].message)) {
          this.comments[local.i]._delete = true;
        }
      }
    }
  }
}

不确定这是否会给嵌套组合键带来任何问题。有时候,嵌套属性在"特殊"情况下会显得有些笨拙。

我想你忘了在nestedProperties中提到allowDelete属性,默认情况下allowDelete在车轮中设置为false,并且不删除复合键形式表。你必须让它为真。例如,在model中,你必须这样做:

   <cfset hasMany(name="campaignlanguages",shortcut="languages", dependent="deleteAll") />
   <cfsetnestedProperties(associations="campaignlanguages",allowDelete="true")/>

你可以在这里找到更多的细节

最新更新