Устранение неполадок «Ключевой столбец не существует в таблице» при построении из файла Schema.yml
Вопрос
У меня есть следующий файл Schema.yml:
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
Но когда я выполняю build-all-reload
команда, отображается следующее сообщение об ошибке:
SQLSTATE[42000]:Синтаксическая ошибка или нарушение прав доступа:1072 Ключевой столбец «подстраница» не существует в таблице.
Я пытаюсь реализовать класс самоотношения.
Решение
Я думаю, вы хотите иметь то, что вы перечислили:
SubPage:
class: Page
local: subpage
foreign: id
type: one
но вам нужен столбец идентификатора (иностранный:id) для первичного ключа таблицы страниц и столбца с именем «подстраница», который содержит ссылку (локальный:подстраницу) ребенку.Таким образом, у вас может быть страница с id = «100», содержащая поле с именем subpage, которое содержит id = «200», и это «200» является фактическим ключом (id) другой страницы.
ОБНОВЛЯТЬ:Из комментария для изменения исходного файла схемы:
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
Обратите внимание, что я делаю некоторые серьезные предположения относительно вашей схемы, в том числе:
- вы хотите, чтобы id был вашим первичным ключом, и вы позаботитесь о его установке (вам может потребоваться автоинкремент:правда в схеме).
- подстраница не является обязательной как дочернее отношение
- section_id не является вашим первичным ключом