我刚刚开始使用ORM而且我遇到了困惑。
这是我的错误:
Error Occurred While Processing Request
Repeated column in mapping for entity: skill column: programTypeID (should be mapped with insert="false" update="false")
以下是我使用的基本方案:
TABLES:
**ProgramType**
programTypeID (PK)
programType varchar(50)
**Skill**
skillID (PK)
Skill varchar(50)
programTypeID(int) (FK)
从我的理解我的技能 - 程序类型关系是多对一的...意义许多技能只能有1个程序类型...或者1个程序类型可以映射到许多技能。
Skill.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>
ProgramType.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?
答案 0 :(得分:2)
您需要删除programTypeId属性,否则您将拥有2个具有该名称的列,因为您定义的关系将创建一个。
首先需要获取与传入的ID匹配的程序类型,然后在Skill对象中设置该值,例如(假设您已经创建了Skill对象)
var programType = entityLoadByPK( 'programType', form.programTypeId)
skill.setProgramType( programType )
作为验证的一部分,您还需要确保在尝试保存之前programType不为null。