Я хотел бы создать объект Note
в моем проекте Symfony, который можно использовать с несколькими другими объектами.Например, его можно использовать, чтобы оставить комментарий о продукте или комментарий о поставщике или комментарий о заказе .Они будут очень похожи на примечания пользователя в руководстве по PHP.
Все мои сущности имеют целочисленный идентификатор, и поэтому я подумал, что лучший способ реализовать это - иметь поля ownerId
и ownerType
назаметка.ownerId
будет установлен как идентификатор продукта, идентификатор поставщика или идентификатор заказа.ownerType
будет установлен на имя объекта.
В любом объекте, к которому я хотел прикрепить примечания (например, продукт , поставщик , порядок и т. д.) я бы добавил:
/**
* @ORM\OneToMany( targetEntity="Note", mappedBy="ownerId" )
*/
private $notes;
public function addNote( $n ) {
if( !$this->notes->contains( $n ) ) {
$this->notes[] = $n;
$n->setProduct( $this );
}
}
В заметке, которую я бы имел:
public function setOwner( $o ) {
$this->ownerId = $o->getId();
$this->ownerType = get_class( $o );
}
public function setProduct( $p ) {
$this->setOwner( $p );
}
public function setSupplier( $s ) {
$this->setOwner( $s );
}
public function setOrder( $o ) {
$this->setOwner( $o );
}
Это создает проблемы, поскольку нет владениябоковое поле или владеющее боковое поле не является ассоциацией или, если я создаю его, его целевая сущность неверна и т. д.
Есть ли способ реализовать эту структуру, используяSymfony и Доктрина?Я действительно не хочу иметь ProductNote , SupplierNote , OrderNote и т. Д., И т. Д., И т. Д., И т. Д., И т. Д., И т. Д., И т. Д., И т. Д., И т. Д.