想要使用sonata admin bundle为一个实体保存多个记录

时间:2013-08-21 05:49:49

标签: symfony doctrine-orm relational-database dynamic-arrays sonata-admin

我正在使用sonata admin bundle并想要针对一个实体保存多个记录。例如;我的实体中有三个字段(id,项目,问题)。假设一个项目有很多问题,我对问题字段使用多个选择,问题与Issue实体有ManyToOne关系,项目与Project实体有ManyToOne关系,我希望保存后prject_issues表是这样的,

id | project| issues
--------------------
 1 |    2   |   23
 2 |    2   |   78
 3 |    2   |   45
 4 |    2   |   64

我对sonata admin和symfony2很新,我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:1)

您必须创建(至少)两个实体,我们将其命名为ProjectIssueProject应设置为与Issue建立关系OneToMany。
完成后,您应该为两个实体创建管理类,并根据SonataAdmin文档进行设置。如果您只希望其中一个可以直接访问,则可以在服务定义中的show_in_dashboard参数上添加false。 接下来,您希望在ProjectAdmin

中添加此内容
protected function configureFormFields(FormMapper $formMapper)
{
   $formMapper
       ->add('issues', 'sonata_type_collection', ['by_reference' => null], 
               ['edit' => 'inline','inline' => 'table']
       )
}

您应该能够在by_refference文档中找到SonataAdmin和其他参数设置的原因。 如果上述代码段不起作用,请尝试在最后一个参数中添加指向admin_code服务的IssueAdmin

答案 1 :(得分:1)

创建三个实体:ProjectIssueProjectIssue。为每个实体创建三个管理类。在@ORM\OneToMany(targetEntity="ProjectIssue", mappedBy="project", cascade={"persist"}, orphanRemoval=true)中创建主义Project关系。创建从ManyToOneProjectIssueProject的两个Issue关系。使用app/console doctrine:generate:entities命令为一对多关系生成正确的setter和getter。请务必在$projectIssues->setProject($this);方法中添加Project::addProjectIssue($projectIssues)。最后,->add('issues', 'sonata_type_collection', array('by_reference' => null), array('edit' => 'inline','inline' => 'table'))中的ProjectAdmin->add('issue')中的ProjectIssueAdmin

这将使您接近解决方案。请记住在您的实体中定义__toString()方法。