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

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

И в моей сущности 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;
}

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

RelationInformation Entity:

   /**
* @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.

6

Решение

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

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

Надеюсь это поможет

8

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]