2015-03-06 2 views
1

В Symfony2 я просто попробую в последнее время подумать с точки зрения черт, создать своеобразное поведение. Предположим, у меня есть атрибут адреса в сущности. Я использовал внешние атрибуты, получатели и сеттеры, связанные с этим в AddressableTrait.Symfony2 & PHP Черты с сущностями отношения внедрены

Но что делать, если адрес становится сущностью? Я начал пытаться определить свое отношение OneToMany в моих чертах, как если бы он был в обычной сущности:

use Doctrine\ORM\Mapping as ORM; 

class AddressableTrait { 

/** 
* @var 
* @ORM\OneToMany(targetEntity="XXXX\GlobalBundle\Entity\Address", inversedBy="What to put here") 
*/ 
protected $addresses; 

/** 
* @return ArrayCollection 
*/ 
public function getAddresses() 
{ 
    return $this->addresses; 
} 

/** 
* @param ArrayCollection $addresses 
*/ 
public function setAddresses($addresses) 
{ 
    $this->addresses = $addresses; 
} 
} 

Что поставить в inversedBy? Цель черты, если точно включить всю функцию поведения, поэтому я думаю, что, по крайней мере, используя традиционную аннотацию/YML/XML, ее невозможно достичь.

Я немного искал его и нашел this very interesting link, что позволяет вам определять отношение через события, но есть еще логика для добавления к отношениям «закончить».

UPDATE: Используя приведенную выше ссылку, мне удалось создать динамическое отношение ManyToMany. обновление схемы работает при создании, но если я прокомментирую динамическое отношение, схема: update --dump-sql не удаляет ее. Кажется, он работает только для добавления. Любой ключ, чтобы заставить динамическое отображение придерживаться добавления/удаления реальных отношений?

Большое спасибо за ваши ответы!

Nicolas

ответ

0

У меня возникла проблема с использованием признаков в объектах. Для регулярных значений базы данных (скалярные, DateTime) черты работали нормально, но когда я попытался определить отношения сущностей в чертах, пакет переноса доктрины преобразует свойство в поле varchar.

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

+0

Если вы идете туда [ссылка] (http://www.theodo.fr/blog/2013/11/dynamic-mapping-in-doctrine-and-symfony-how-to-extend-entities/), вы найти способ сохранить их в чертах. Кроме того, в некоторых отношениях ManyToOne вам не нужно определять обе стороны. Эти отношения особенно полезны в случае черты, потому что вы только определить соотношение многих сторон: 'черта Monositeable { /** * @ORM \ ManyToOne (targetEntity = "Acme \ MultisiteBundle \ Entity \ Site") */ защищенный сайт; } ' – nbonniot

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