0

我正在使用奏鳴曲管理束並希望針對一個實體保存多個記錄。例如;我在我的實體(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很新,我怎麼能做到這一點?

回答

1

您必須創建(至少)兩個實體,可以將它們命名爲ProjectIssueProject應與OneOneMany建立關係,並與Issue建立關係。
完成之後,您應該創建兩個實體的管理員類並根據SonataAdmin文檔進行設置。如果您只希望其中一個可直接訪問,則可以在服務定義中的false參數上添加show_in_dashboard
接下來,你會希望在添加此您ProjectAdmin

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

你應該能夠找到爲什麼by_refference等參數在SonataAdmin文檔設置了這樣的理由。
如果上述代碼段不起作用,請嘗試在最後一個參數中指向IssueAdmin服務中指向admin_code

1

創建三個實體:Project,IssueProjectIssue。爲每個實體創建三個管理員類。在Project中創建Doctrine @ORM\OneToMany(targetEntity="ProjectIssue", mappedBy="project", cascade={"persist"}, orphanRemoval=true)關係。創建兩個ManyToOne關係從ProjectIssueProjectIssue。使用app/console doctrine:generate:entities命令爲一對多關係生成正確的setter和getters。請記住在Project::addProjectIssue($projectIssues)方法中添加$projectIssues->setProject($this);。最後,ProjectAdmin中的->add('issues', 'sonata_type_collection', array('by_reference' => null), array('edit' => 'inline','inline' => 'table'))ProjectIssueAdmin中的->add('issue')

這會讓你接近解決方案。請記住在您的實體中定義__toString()方法。

相關問題