我正试图让它发挥作用......
我有五张桌子,我试图联系在一起:properties
,languages
,propertyLanguages
,buildings
和buildingTranslations
属性,语言和属性语言是我工作过的典型的多对多关系。我接下来要做的是建筑物,这些建筑物与物业相关联,并且每个语言的文本字段都将进入建筑物翻译。
我为propertylanguages
,buildings
和buildingtranslations
我只是不确定在创建/更新建筑物记录时如何设置模型和控制器
修改
我设法在mssql中创建一个代表关系的视图 view http://img33.imageshack.us/img33/7411/11907303.png
希望这可以更容易地看到关系。
我想创建和编辑包含翻译字段(并在数据库中更新)的建筑物
语言在属性级别分配。通过propertyid链接到属性的建筑使用可用的语言(通过propertylanguages [where propertyid = building.propertyid])来确定建筑物所需的buildingTranslations
答案 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魔术照顾这些事情变得越来越不安。我可能会转而直接处理复杂的关系。