cfwheels嵌套属性问题

时间:2011-12-06 16:57:07

标签: coldfusion coldfusion-9 cfwheels

我正试图让它发挥作用......

我有五张桌子,我试图联系在一起:propertieslanguagespropertyLanguagesbuildingsbuildingTranslations

属性,语言和属性语言是我工作过的典型的多对多关系。我接下来要做的是建筑物,这些建筑物与物业相关联,并且每个语言的文本字段都将进入建筑物翻译。

我为propertylanguagesbuildingsbuildingtranslations

设置了外键

我只是不确定在创建/更新建筑物记录时如何设置模型和控制器


修改

我设法在mssql中创建一个代表关系的视图 view http://img33.imageshack.us/img33/7411/11907303.png

希望这可以更容易地看到关系。

我想创建和编辑包含翻译字段(并在数据库中更新)的建筑物

语言在属性级别分配。通过propertyid链接到属性的建筑使用可用的语言(通过propertylanguages [where propertyid = building.propertyid])来确定建筑物所需的buildingTranslations

2 个答案:

答案 0 :(得分:2)

希望这有助于一些人:

模型/ Building.cfc

hasMany(name="BuildingTranslations", foreignKey="yrhBuildingId");
belongsTo(name="Property", foreignKey="yrhPropertyId");

控制器/ Buildings.cfc

function new () {
  building = model("Building").new();
  building.yrhPropertyId = params.yrhPropertyId; //assuming this was passed in
  requiredLanguages = model("PropertyLanguages").findAll(where="yhrPropertyId=#building.yhrPropertyId#");
}

function create () {
  building = model("Building").new(params.Building);
  building.save();

  requiredLanguages = model("PropertyLanguages").findAll(where="yhrPropertyId=#building.yhrPropertyId#");
  for (var i = 1; i <= requiredLanguages.recordCount; i++)
  {
    buildingTranslation = model("BuildingTranslation").new();
    buildingTranslation.yrhBuildingId = building.id;
    buildingTranslation.yrhLanguageId = requiredLanguages.yrhLanguageId[i];
    buildingTranslation.langName = params.BuildingTranslations[requiredLanguages.yrhLanguageId[i]];
    buildingTranslation.save();
  }

  redirectTo(action="list");
}

答案 1 :(得分:0)

这是我采取的方法

    <cfset viewBuildingNames = model("yrhBuildingNamesView").findAll(where="yrhBuildingId=#params.key#")>   <!--- FIND ALL BUILDING NAMES --->
    <cfset yrhbuilding = model("Yrhbuilding").findByKey(key=params.key)>   <!--- CREATE BUILDING MODEL --->
    <cfset yrhproperty = model("YrhProperty").findByKey(key=yrhbuilding.yrhPropertyId, include="YrhPropertyLanguages")>   <!--- language info through property--->
    <cfset yrhbuilding.yrhproperty = yrhproperty>
    <cfset yrhbuilding.yrhBuildingTranslations = ArrayNew(1)>

    <cfloop query="viewBuildingNames">
        <cfset yrhBuildingTranslation = model("yrhBuildingTranslation").new(yrhBuildingId=#yrhBuildingId#, yrhLanguageId=#yrhLanguageId#, langName=#LANGNAME#)>
        <cfset ArrayAppend(yrhbuilding.yrhBuildingTranslations, yrhBuildingTranslation)>
    </cfloop>

它有点像半轮的方式。它依赖于在数据库中创建的视图

一旦模式;创建,更新工作,但我没有在空langNames上收到错误消息,只是一个错误,我可以忍受。

我正计划在建筑物下面添加另一层物品,这需要与propertyLanguages相同的连接,虽然它仍然可以正常工作但我对cfwheels魔术照顾这些事情变得越来越不安。我可能会转而直接处理复杂的关系。