Добрый день!
У меня есть Doctrine-сущность Foo, которая связана One-To-One с сущностью AbstractBar:
/**
* @ORM\Table(name="foo")
* @ORM\Entity
*/
class Foo
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var AbstractBar
*
* @ORM\OneToOne(targetEntity="AbstractBar", cascade={"persist"})
* @ORM\JoinColumn(name="bar_id", referencedColumnName="id")
*/
private $bar;
}
Сущность AbstractBar - это абстрактная сущность, с которой связаны две конкретные сущности по модели
Class Table Inheritance.
Таким образом, у меня есть вот что:
/**
* @ORM\Table(name="bar")
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="bar_type", type="string")
* @ORM\DiscriminatorMap({"one" = "BarOne", "two" = "BarTwo"})
*/
abstract class AbstractBar
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
/**
* @ORM\Table(name="bar_one")
* @ORM\Entity
*/
class BarOne extends AbstractBar
{
// свойства класса BarOne
}
/**
* @ORM\Table(name="bar_two")
* @ORM\Entity
*/
class BarTwo extends AbstractBar
{
// свойства класса BarTwo
}
При этом админка (SonataAdminBundle) сущности Foo сконфигурирована следующим образом:
class FooAdmin extends AbstractAdmin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('bar', AdminType::class, array(), array(
'admin_code' => 'key.of.bar_one.admin.service'
))
;
}
}
При этом сам сервис администраторского класса выглядит следующим образом:
key.of.bar_one.admin.service:
class: MyBundle\Admin\BarAdmin
arguments: [~, MyBundle\Entity\BarOne, ~]
tags:
- name: sonata.admin
manager_type: orm
show_in_dashboard: false
Приведенный выше код позволяет мне редактировать и создавать сущности BarOne, редактируя сущность Foo.
Вопрос: как мне сделать так, чтобы я мог в админке переключать между BarOne и BarTwo? Т.е. чтобы можно было реализовать тот множественный выбор, который предоставляется Doctrine ORM (Class Table Inheritance).