Coldfusion 与不带组合键的cfwheels的多对多关系

Coldfusion 与不带组合键的cfwheels的多对多关系,coldfusion,many-to-many,cfwheels,Coldfusion,Many To Many,Cfwheels,我一直在关注这里的信息: cfwheels.org/docs/1-1/chapter/nested-properties 我最终下载了一个在同一个地方发生故障的 代码执行得很好,从某种意义上说,我没有得到任何错误,但是多个表没有得到新的条目,当我在数据库中手动添加条目时,它们不会被复选框反映出来,有时在更新模型时会被删除 编辑 我发现了这个问题。。。只是不知道如何解决它。这里有一个很容易被忽略的小细节。应用程序似乎依赖于复合键,键的顺序很重要。但我没有使用复合键 (以下为示例…) 如何使带有c

我一直在关注这里的信息: cfwheels.org/docs/1-1/chapter/nested-properties

我最终下载了一个在同一个地方发生故障的

代码执行得很好,从某种意义上说,我没有得到任何错误,但是多个表没有得到新的条目,当我在数据库中手动添加条目时,它们不会被复选框反映出来,有时在更新模型时会被删除


编辑 我发现了这个问题。。。只是不知道如何解决它。这里有一个很容易被忽略的小细节。应用程序似乎依赖于复合键,键的顺序很重要。但我没有使用复合键

(以下为示例…)

如何使带有cols:
id
tagsid
commentsid
的表正常工作


我看到的问题是,cfwheels在创建标记模型时一直试图使用id标记

尽管我非常喜欢cfwheels,但我必须承认,我并不喜欢表单助手功能或“快捷方式”功能。在本例中,我只是“恢复”到更直接/简单的CFML来构造复选框(如果不是整个表单)和循环逻辑,以将值保存在联接表中。例如:

<fieldset>
<legend>PropertyLanguages</legend>

<cfloop query="Languages">
<label>
  #Languages.language#
  <input type="checkbox" name="Property[PropertyLanguages]" value="#Languages.id#">
</label>
</cfloop>


</fieldset>

财产语言
#语言#
然后更改更新控制器逻辑,如下所示:

<!--- CONTROLLER - update.cfm - updateProperty --->
<cffunction name="updateProperty">
    <cfscript>   
    Property = model("Property").findByKey(key=params.Property.id);
    Property.update(params.Property);

    if (IsDefined("params.Property.PropertyLanguages"))
    {
      model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id# AND languageid NOT IN (#params.Property.PropertyLanguages#)");

      for (var i = 1; i<=ListLen(params.Property.PropertyLanguages); i++)
      {
        languageid = ListGetAt(params.Property.PropertyLanguages, i);
        if (! IsObject(model("PropertyLanguages").findOne(where="propertyid=#params.Property.id# AND languageid=#languageid#")))
        {
          pl = model("PropertyLanguages").new();
          pl.langugageid = languageid;
          pl.propertyid = params.Property.id;
          pl.save();
        }
      }
    }
    else
    {
      model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id#");
    }
    </cfscript>    
</cffunction>

Property=model(“Property”).findByKey(key=params.Property.id);
属性更新(参数属性);
if(已定义(“params.Property.PropertyLanguages”))
{
model(“PropertyLanguages”).deleteAll(其中=“propertyid=#params.Property.id#和languageid不在(#params.Property.PropertyLanguages#));

对于(var i=1;i,尽管我非常喜欢CFWheels,但我必须承认我并不喜欢表单帮助函数或“快捷方式”功能。在本例中,我只是“还原”到更直接/简单的CFML来构造复选框(如果不是整个表单的话)和循环逻辑来保存联接表中的值。例如:

<fieldset>
<legend>PropertyLanguages</legend>

<cfloop query="Languages">
<label>
  #Languages.language#
  <input type="checkbox" name="Property[PropertyLanguages]" value="#Languages.id#">
</label>
</cfloop>


</fieldset>

财产语言
#语言#
然后更改更新控制器逻辑,如下所示:

<!--- CONTROLLER - update.cfm - updateProperty --->
<cffunction name="updateProperty">
    <cfscript>   
    Property = model("Property").findByKey(key=params.Property.id);
    Property.update(params.Property);

    if (IsDefined("params.Property.PropertyLanguages"))
    {
      model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id# AND languageid NOT IN (#params.Property.PropertyLanguages#)");

      for (var i = 1; i<=ListLen(params.Property.PropertyLanguages); i++)
      {
        languageid = ListGetAt(params.Property.PropertyLanguages, i);
        if (! IsObject(model("PropertyLanguages").findOne(where="propertyid=#params.Property.id# AND languageid=#languageid#")))
        {
          pl = model("PropertyLanguages").new();
          pl.langugageid = languageid;
          pl.propertyid = params.Property.id;
          pl.save();
        }
      }
    }
    else
    {
      model("PropertyLanguages").deleteAll(where="propertyid=#params.Property.id#");
    }
    </cfscript>    
</cffunction>

Property=model(“Property”).findByKey(key=params.Property.id);
属性更新(参数属性);
if(已定义(“params.Property.PropertyLanguages”))
{
model(“PropertyLanguages”).deleteAll(其中=“propertyid=#params.Property.id#和languageid不在(#params.Property.PropertyLanguages#));

对于(var i=1;我只是想澄清一下,使用复合键使其工作,我只是想知道没有复合键如何工作只是想澄清一下,使用复合键使其工作,我只是想知道没有复合键如何工作