В 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
Если вы идете туда [ссылка] (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