Frage

Ich versuche, das zum Laufen zu bringen ...

Ich habe fünf Tabellen, die ich zu verknüpfen versuche: properties, languages, propertyLanguages, buildings und buildingTranslations

Eigenschaften, Sprachen und Eigenschaftensprachen sind eine typische Viele-zu-Viele-Beziehung, mit der ich arbeite. Als nächstes versuche ich, die Gebäude zu haben, die mit der Eigenschaft verknüpft sind und Textfelder für jede Sprache haben, die in die Gebäudeübersetzungen aufgenommen werden.

Ich habe die Fremdschlüssel für den propertylanguages, den buildings und den buildingtranslations eingerichtet

Ich bin mir nur nicht sicher, wie ich das Modell und den Controller beim Erstellen / Aktualisieren von Gebäudedatensätzen einrichten soll.


bearbeiten

Ich habe es geschafft, eine Ansicht in mssql zu erstellen, die die Beziehung darstellt Ansicht

hoffentlich erleichtert dies das Erkennen der Beziehungen.

Ich möchte Gebäude mit den enthaltenen Übersetzungsfeldern erstellen und bearbeiten (und in der Datenbank aktualisieren)

Die Sprachen werden auf Eigenschaftsebene zugewiesen. Das Gebäude, das über die propertyid mit der Eigenschaft verknüpft ist, verwendet die verfügbaren Sprachen (über Eigenschaftssprachen [wobei propertyid= building.propertyid]), um die für das Gebäude erforderlichen Gebäudeübersetzungen zu bestimmen.

War es hilfreich?

Lösung

Hoffentlich hilft das einigen:

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

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");
}

Andere Tipps

Hier ist der Ansatz, den ich gewählt habe

    <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>

Es ist eine Art Halbrad.Es basiert auf der in der Datenbank erstellten Ansicht

einmal den Modus;erstellt wird, funktioniert die Aktualisierung, aber ich erhalte keine Fehlermeldung auf den leeren langNames, sondern nur einen Fehler, mit dem ich leben kann.

Ich habe vor, eine weitere Ebene von Gegenständen hinzuzufügen, die sich unter dem Gebäude befinden und die dieselbe Verbindung zu den propertyLanguages erfordern. Obwohl dies immer noch in Ordnung sein sollte, wird mir die Magie der cfwheels, die sich um diese Dinge kümmert, zunehmend unangenehm.Ich wechsle möglicherweise zum direkten Umgang mit komplexen Beziehungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top