2

我试图让这个工作......

我有五张桌子,我想把它们绑在一起:properties、、、和languagespropertyLanguagesbuildingsbuildingTranslations

properties,languages 和 propertylanguages 是我工作的典型多对多关系。我接下来要做的是拥有建筑物,这些建筑物与房产相关联,并为每种语言提供文本字段,这些文本将进入建筑物翻译。

我已经为propertylanguages,buildingsbuildingtranslations

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


编辑

我设法在 mssql 中创建了一个表示关系的视图 看法

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

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

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

4

2 回答 2

2

希望这会有所帮助:

模型/建筑.cfc

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

控制器/建筑物.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");
}
于 2011-12-06T19:46:53.960 回答
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>

这是一种半 cfwheels 方式。它依赖于在数据库中创建的视图

一次模式;已创建,更新工作,但我没有收到关于空 langNames 的错误消息,只是一个错误,我可以忍受。

我计划在建筑物下方添加另一层项目,这将需要与 propertyLanguages 的相同连接,虽然它应该仍然可以正常工作,但我对 cfwheels 处理这些事情的魔法越来越感到不安。我可能会转而直接处理复杂的关系。

于 2011-12-06T20:02:55.853 回答