cfwheels proprietà nidificate problema
-
28-10-2019 - |
Domanda
Sto cercando di ottenere questo lavoro...
Ho un cinque tabelle che sto cercando di legare insieme: properties
, languages
, propertyLanguages
, buildings
e buildingTranslations
proprietà,lingue e propertylanguages è tipico di molti-a-molti rapporto che ho di lavoro.Quello che sto cercando di fare è di avere gli edifici, che sono legati per le proprietà e i campi di testo per ogni lingua che andrà all'interno della buildingtranslations.
Ho impostato le chiavi esterne per la propertylanguages
, buildings
e buildingtranslations
Non sono proprio sicuro di come impostare il modello e il controller durante la creazione/aggiornamento building records
modifica
Sono riuscito a creare una vista in mssql che rappresenta la relazione
speriamo che questo rende più facile vedere le relazioni.
Voglio creare e modificare gli Edifici con la traduzione campi disponibili e aggiornati nel database)
Le lingue sono assegnati a livello di proprietà.L'edificio è collegato alla proprietà attraverso il propertyid utilizza le lingue disponibili (attraverso propertylanguages[dove propertyid = edificio.propertyid]) per determinare il buildingTranslations necessari per la costruzione
Soluzione
Speriamo che questo aiuta alcuni:
modelli/Edificio.cfc
hasMany(name="BuildingTranslations", foreignKey="yrhBuildingId");
belongsTo(name="Property", foreignKey="yrhPropertyId");
controller/Edifici.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");
}
Altri suggerimenti
ecco l'approccio che ho preso
<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>
e ' una sorta di mezza cfwheels modo.esso si basa sulla vista creata nel database
una volta che la modalità;è stato creato, l'aggiornamento funziona, ma non ottengo un messaggio di errore sul vuoto langNames, solo un errore, Che posso vivere.
Ho intenzione di aggiungere un altro strato di elementi che si trovano in costruzione, che richiedono la stessa connessione a propertyLanguages, Mentre dovrebbe ancora funzionare OK mi sto convincendo sempre più a disagio circa il cfwheels magia prendersi cura di queste cose.Potrei essere il passaggio di gestione di relazioni complesse direttamente.