1

我刚开始使用 ORM,我遇到了困惑。

这是我的错误:

Error Occurred While Processing Request
Repeated column in mapping for entity: skill column: programTypeID (should be mapped with insert="false" update="false")

这是我正在使用的基本场景:

表格:

**ProgramType**
programTypeID (PK)
programType varchar(50)

**Skill**
skillID (PK)
Skill varchar(50)
programTypeID(int) (FK)

根据我的理解,我的技能 - 程序类型关系是多对一的......意思是许多技能只能有 1 个程序类型......或者 1 个程序类型可以映射到许多技能。

技能.cfc:

<cfcomponent persistent="true">

<cfproperty name="skillid" fieldType="id" generator="identity">
    <cfproperty name="skill" ormType="string">    
    <cfproperty name="programTypeID" ormType="integer">    
    <cfproperty name="programType" fieldtype="many-to-one" fkcolumn="programTypeID" cfc="programType">    
</cfcomponent>

程序类型.cfc

<cfcomponent persistent="true" table="programtype">

    <cfproperty name="programtypeid" fieldType="id" generator="identity">
    <cfproperty name="programtype" ormType="string">

   <cfproperty name="skill" fieldType="one-to-many" type="array" cfc="skill" fkcolumn="programTypeID" inverse="true">

</cfcomponent>

SkillEditForm.cfm

<cfoutput>
<form class="form-horizontal" action="submit.cfm" method="post">
<input name="skillid" type="hidden" value="#skill.getSkillid()#">

  <div class="control-group">
    <label class="control-label" for="programTypeID">Skill</label>
    :
    <div class="controls">
        <select name="programTypeID">
        <cfloop index="programType" array="#programTypes#">
            <option value="#programType.getProgramTypeID()#"

            <cfif programType.getProgramtypeid() eq skillProgramType.getProgramTypeid()>selected</cfif>

            >#programType.getProgramType()#</option>
        </cfloop>
        </select>
    </div>
  </div>


  <div class="control-group">
    <label class="control-label" for="skill">Skill</label>
    :
    <div class="controls">
      <input type="text" id="skill" placeholder="" name="skill" value="#skill.getSkill()#">
    </div>
  </div>

  <div class="control-group">
    <div class="controls">
      <button type="submit" class="btn">Submit</button>
    </div>
  </div>                  

</form>
</cfoutput>

我发现如果我从 Skill.cfc 中删除 programTypeID,我的错误就会消失。但是,如果我的 CFC 中未定义 programTypeID,当我在 submit.cfc 页面上添加或更新我的实体时,我会感到困惑......我将如何从表单上的选择框中设置 programTypeID?

4

1 回答 1

2

您需要删除 programTypeId 属性,否则您将拥有 2 个具有该名称的列,因为您定义的关系将创建一个。

您首先需要获取与传入的 ID 匹配的程序类型,然后在 Skill 对象中设置该值,例如(假设您已经创建了一个 Skill 对象)

var programType = entityLoadByPK( 'programType', form.programTypeId)
skill.setProgramType( programType )

作为验证的一部分,您还需要在尝试保存之前确保 programType 不为空。

于 2013-07-27T12:20:20.153 回答