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 view

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top