我正在使用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很新,我怎么能实现这个目标?
答案 0 :(得分:1)
您必须创建(至少)两个实体,我们将其命名为Project
和Issue
,Project
应设置为与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)
创建三个实体:Project
,Issue
和ProjectIssue
。为每个实体创建三个管理类。在@ORM\OneToMany(targetEntity="ProjectIssue", mappedBy="project", cascade={"persist"}, orphanRemoval=true)
中创建主义Project
关系。创建从ManyToOne
到ProjectIssue
和Project
的两个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()
方法。