Fehlerbehebung „Schlüsselspalte existieren nicht in der Tabelle“ beim Bau von schema.yml
Frage
Ich habe folgende schema.yml-Datei:
Page:
actAs:
I18n:
fields: [name,html,urlShortDesc]
columns:
name: string
gender:
type: enum
values: [html, photoGallery]
default: html
html: string
urlShortDesc: string
section_id:
type: integer
notnull: true
relations:
Section:
foreignAlias: Pages
SubPage:
class: Page
local: subpage
foreign: id
type: one
Aber, wenn ich den build-all-reload
Befehl ausführen, wird die folgende Fehlermeldung angezeigt:
SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1072 Key Spalt 'Unterseite' nicht in der Tabelle vorhanden
Ich versuche, eine Selbstbeziehung Klasse zu implementieren.
Lösung
Ich glaube, Sie haben wollen, was Sie haben, aufgelistet:
SubPage:
class: Page
local: subpage
foreign: id
type: one
, aber Sie müssen eine ID-Spalte (foreign: id) für den Primärschlüssel der Seitentabelle und eine Spalte ‚Unterseite‘ genannt, die den Verweis enthält (local: Unterseite) für das Kind. Sie können also auf Seite haben mit id = „100“ ein Feld namens Unterseite enthält, die eine ID enthält = „200“ und „200“ ist der eigentliche Schlüssel (id) von einer anderen Seite.
UPDATE: Von Kommentar ursprüngliche Schemadatei zu ändern:
Page:
actAs:
I18n:
fields: [name,html,urlShortDesc]
columns:
name: string
gender:
type: enum
values: [html, photoGallery]
default: html
html: string
urlShortDesc: string
section_id:
type: integer
notnull: true
id:
type: integer
notnull: true
subpage:
type: integer
notnull: false
relations:
Section:
foreignAlias: Pages
SubPage:
class: Page
local: subpage
foreign: id
type: one
Bitte beachten Sie, dass ich einige ernste Annahmen auf Ihrem Schema mache einschließlich:
- Sie id als Primärschlüssel und dass Sie darauf achten, wird es eingestellt wird (Sie können autoincrement wollen: true im Schema).
- Unterseite ist optional als Kind-Beziehung
- SECTION_ID ist nicht Ihre Primärschlüssel