cfwheels - 删除未使用的复合密钥对

时间:2013-05-01 21:54:53

标签: coldfusion composite-key cfwheels nested-properties

我遇到了使用复合键的嵌套属性的问题。

当我正在编辑具有多个嵌套属性实例的模型(使用复合键)并希望通过将它们留空而将其更新为更少时,cfWheels不会删除不再使用的那些,并维护旧的价值。有没有办法在不嵌套模型上调用delete的情况下强制删除这些?

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

2 个答案:

答案 0 :(得分:1)

我认为您忘记在allowDelete中提及nestedProperties属性,因为defalut allowDelete在轮子中设置为false,并且不会删除复合键表格表。你必须把它设置为真。 例如在模型中你必须做这样的事情。

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

您可以找到更多详情here

答案 1 :(得分:1)

initnestedProperties()的电话中,尝试添加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;
        }
      }
    }
  }
}

不确定这是否会给嵌套复合键带来任何问题。有时嵌套属性对于“特殊”情况有点麻烦。