0
我有一個Doctrine實體Foo
,它與一對一模型中的AbstractBar
原則實體相關。如何通過SonataAdminBundle(Symfony)管理Doctrine ORM類表繼承?
/**
* @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 class properties
}
/**
* @ORM\Table(name="bar_two")
* @ORM\Entity
*/
class BarTwo extends AbstractBar
{
// BarTwo class properties
}
的Foo
的管理面板(SonataAdminBundle)實體配置如下:
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
和BarTwo
之間切換?也就是說,我可以實現由Doctrine ORM(類表繼承)提供的多項選擇。