Ich versuche derzeit, ein Backend für ein Projekt zu erstellen. In diesem Projekt können Sie "ContentElements" erstellen, mit denen Inhalte auf einer Seite angezeigt werden können (in meinem Fall Sites). Jedes ContentElement kann mehrere Optionen haben. Wenn ein Benutzer eine neue Site mit einem ContentElement (z. B. Header) erstellt, würde er alle Optionen des Elements eingeben. Zum Beispiel:Join Tabelle mit der ID einer anderen Join Tabelle
"src": "/img/bg.jpg",
"text": "Lorem ipsum..."
Um den Optionswert pro Seite speichern wird es verwendet, in, speichere ich diese Werte in einer separaten Tabelle (content_elements_sites_values).
Mein Plan sieht derzeit wie folgt aus: data scheme
Also, was ich derzeit versuche zu tun ist, wenn ich alle Daten mit der Website von ‚content_elements_sites_values‘
Ich möchte auch die Daten erhalten zugeordnet bekommen$site = $this->Sites->get($id, [
'contain' => ['Templates', 'Colors', 'SiteTypes', 'ContentElements' => [
'ContentElementOptions' => [
'ContentElementsSitesValues'
]
]
],
'conditions' => [
// Just to explain my problem.
'ContentElementsSites.id' => 'ContentElementsSitesValues.content_elements_sites_id'
]
]);
Ich weiß wirklich nicht, ob das überhaupt möglich ist oder ob mein "Design" ein totaler Bullen ist. Aber ich kann mir keine andere Möglichkeit vorstellen, die gefüllten Daten zu speichern. Ich bin sehr offen für Vorschläge für eine bessere Möglichkeit, diese Daten zu speichern. Bitte fragen Sie, wenn Sie weitere Informationen benötigen, um mir zu helfen.
Vielen Dank im Voraus!
EDIT
Ich versuche, besser zu erklären, was ich erreichen will.
Jeder Website können mehrere content_elements des gleichen Typs haben (Verband in content_elements_sites gespeichert Verknüpfungstabelle).
Jeder content_element kann durch einen Admin mehrere content_element_options
Alle content_element_options und content_elements definiert haben.
kann ein anderer Benutzer eine Website und füllen Sie es mit content_elements erstellen und content_elements_sites_value für alle content_element_options eingeben. Und da das gleiche content_element (z. B. ein Absatz oder eine Liste) mehrere Vorkommen auf der gleichen Website haben kann, muss ich alle content_elements_sites_value der Benutzer eingegeben.
Das ist, warum ich geschaffen, um die Verbindung zwischen content_elements_sites und content_element_options.
Derzeit verwende ich diese Abfrage den Wert alles erwarten zu bekommen:
$site = $this->Sites->find('all', [
'conditions' => [
'Sites.id' => $id
],
'contain' => ['ContentElements' => [
'sort' => [
'ContentElementsSites.order' => 'ASC'
],
'ContentElementOptions' => [
'ContentElementsSitesValues' => [
'conditions' => [
'ContentElementsSitesValues.content_elements_sites_id' => 'ContentElementsSites.id',
]
]
]
]
]
]);
Dies leer content_elements_sites_values Ergebnisse
(int) 1 => object(App\Model\Entity\ContentElementOption) {
'id' => (int) 7,
'content_element_id' => (int) 1,
'name' => 'Test',
'json_name' => 'test',
'option_type_id' => (int) 1,
'content_elements_sites_value' => null,
}
derzeit Mein Programm sieht wie folgt aus: data scheme
Ich frage mich, ob diese Abfrage überhaupt möglich ist. Oder wenn das Ganze einfach zu flexibel ist.
Aber es wäre nicht möglich, mehrere Vorkommen eines _content_element_ auf derselben Seite zu haben, wenn ich die ** site_id ** in ** content_elements_sites_values ** setze. Ich werde meine Frage aktualisieren, weil ich das nicht klar gemacht habe - tut mir leid. Aber Sie haben recht, es wird sehr flexibel sein. Und das gibt mir Kopfschmerzen :) – Slice
Ich sehe. dann können Sie mit ** content_elements_sites_id ** fortfahren. Was die Abfrage betrifft, sollten Sie ** matching() ** anstelle von * contain() * verwenden, da Sie die Ergebnisse der Haupttabelle auf der Grundlage von Zuordnungsbedingungen einschränken möchten. Gehen Sie hier Schritt für Schritt vor - rufen Sie zuerst zwei Verknüpfungen ab, überprüfen Sie die Abfrage im Debug-Kit, feuern Sie sie direkt in der Datenbank ab, nehmen Sie bei Bedarf Änderungen vor und fügen Sie dann die dritte Verknüpfung hinzu und wiederholen Sie diese. [Ref] (http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#retrieving-associated-data) – Gaurav