Отображения несовместимы друг с другом

У меня проблема с несогласованными отображениями. У меня есть в моем приложении два объекта – Контакт (сущность с контактами …) и Информация, организации с информацией об этом контакте (телефоны, электронные письма, факс, веб-сайты и т. Д.).

И в моем объекте Contact я создал переменные для каждого типа, мне это нужно в моем приложении, потому что этот способ намного проще:

/** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactInformations; /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactPhone; /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactFax; /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactWebsite; /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactEmail; /** * @ORM\OneToMany( targetEntity = "RelationInformations" , mappedBy = "objectID", cascade={"persist"} ) */ protected $contactCommunicator; 

И например, геттер для телефонов выглядит так:

 /** * Get contactPhone * * @return \Doctrine\Common\Collections\Collection */ public function getContactPhone() { if ($this->contactPhone !== null) { foreach ($this->contactPhone->toArray() as &$info) { if ($info->getType() !== RelationInformations::TYPE_TELEPHONE) { $this->contactPhone->removeElement($info); } } } return $this->contactPhone; } 

Таким образом, я получил только телефоны из своей информации только с помощью этой функции, поэтому в других местах приложения гораздо проще получить то, что я хочу.

Соотношение:

  /** * @var integer * @ORM\Column( name = "rnis_id" , type = "integer" , nullable = false ); * @ORM\Id * @ORM\GeneratedValue( strategy = "AUTO") */ private $id; /** * @var integer * @ORM\ManyToOne( targetEntity = "RelationContact" , inversedBy = "contactInformations" ) * @ORM\JoinColumn( name = "rnis_object_id" , referencedColumnName="rnct_id", nullable = false ); */ private $objectID; /** * @var string * @ORM\Column( name = "rnis_value" , type = "string" , nullable = false ) */ private $value; /** * @var string * @ORM\Column( name = "rnis_type" , type = "string" , nullable = false , length = 1 ) */ private $type; /** * @var boolean * @ORM\Column( name = "rnis_active" , type = "boolean" , nullable = false ) */ private $active; /** * @var boolean * @ORM\Column( name = "rnis_default" , type = "boolean" , nullable = false ) */ private $default; /** * @var string * @ORM\Column( name = "rnis_txt" , type = "string" , nullable = true ) */ private $txt; /** * @var integer * @ORM\Column( name = "rnis_type_private_business" , type = "integer" , nullable = true ) */ private $typePrivateBusiness; 

Проблема в том, что в моем профилировщике я вижу ошибки, например, ниже. Приложение работает правильно, но я хочу решить эту проблему.

 The mappings RelationContact#contactPhone and RelationInformations#objectID are inconsistent with each other. The mappings RelationContact#contactFax and RelationInformations#objectID are inconsistent with each other. The mappings RelationContact#contactWebsite and RelationInformations#objectID are inconsistent with each other. The mappings RelationContact#contactEmail and RelationInformations#objectID are inconsistent with each other. The mappings RelationContact#contactCommunicator and RelationInformations#objectID are inconsistent with each other. The mappings RelationContact#contactBrand and RelationInformations#objectID are inconsistent with each other. 

Вы не можете сопоставить одни и OneToMany же отношения OneToMany с одним и тем же mappedby ключом, поэтому beahviour проверки правильности отображения доктрины – это правильно передать первую ссылку на contactInformations и провалиться с другой.

Попробуйте сопоставить свои сущности как « One-To-Many, Unidirectional with Join Table как описано в ссылке Doctrine2 doc

Надеюсь, что эта помощь