2014-10-09 2 views
0

Привет я пытаюсь создать OneToMany отношения между Пейджем и блока таблиц, но я получаю следующее сообщение об ошибке на проверке схемы:отображение класса Entity недействителен

[Mapping] FAIL - The entity-class 'mypath\Entity\Block' mapping is invalid: 
* The association mypath\Entity\Block#pages refers to the inverse side field  mypath\Entity\Page#blocks which does not exist. 

[Mapping] FAIL - The entity-class 'mypath\Entity\Page' mapping is invalid: 
* The association mypath\Entity\Page#block refers to the owning side field  mypath\Entity\Block#page which does not exist. 

Ниже моя страница и Блочные Сущности

Страница:

/** 
* @ORM\OneToMany(targetEntity="Block", mappedBy="page") 
*/ 
private $block; 

Блок:

/** 
* @ORM\ManyToOne(targetEntity="Page", inversedBy="block") 
* @ORM\JoinColumn(referencedColumnName="id") 
*/ 
private $pages; 

Я не уверен, что с ним не так, но похоже что-то связано с аннотациями. Пожалуйста, помогите, спасибо !!!

+0

Лично я бы назвал Сторону ManyToOne единственной, поэтому $ page (потому что для данного блока есть только одна страница), но все, что работает для вас. –

ответ

0

В аннотации, вы вызываете свойства «блоки и„страницу“, но они называются„блок“и„страницы“в реальном коде

Страница:.

/** 
* @ORM\OneToMany(targetEntity="Block", mappedBy="page") 
*/ 
private $blocks; 

Блока :

/** 
* @ORM\ManyToOne(targetEntity="Page", inversedBy="blocks") 
*/ 
private $page; 
+0

Я пробовал это, но он не работает. Также я отредактировал сообщение, добавленное JoinColumn, которое я пропустил, но все еще получаю ошибку. – user3651267

+0

Я предполагаю, что цель состоит в том, чтобы страница содержала много блоков? Каково имя поля внешнего ключа для страницы в таблице блоков? –

+0

Да, намерение состоит в том, что страницы могут иметь много блоков. Имя поля в таблице блоков - page_id, которое автоматически генерируется symfony. Я не упоминал об этом в блочном объекте. – user3651267

-1

Ok я нашел решение проблема была с именами

Так что, если мы читаем.. это в нормальных условиях, это имеет смысл.

Страница может иметь много блоков. Таким образом, объект страницы будет

/** 
* @ORM\OneToMany(targetEntity="Block", mappedBy="pages") 
*/ 
private $blocks; 

Аналогичным образом блок принадлежит ко многим страницам. Таким образом, блок лицо будет

/** 
* @ORM\ManyToOne(targetEntity="Page", inversedBy="blocks") 
* @ORM\JoinColumn(referencedColumnName="id") 
*/ 
private $pages; 

targetEntity всегда будет имя класса, который будет сингулярным и имена полей будет множественного числа (в случае OneToMany и может быть в других случаях).

Это решает проблему. Хорошего дня !!!

+0

Собственно, на самом деле это не так, как вы думаете. Вам нужно использовать отношение ManyToMany между блоком и страницей. Как бы то ни было, блок может принадлежать только одной странице. – Cerad

Смежные вопросы