【发布时间】:2013-03-26 04:08:00
【问题描述】:
我已经无数小时撞到墙上了,我希望 SO 能有所帮助!
我有 Retailer、Branch 和 RetailerBranches 实体,它们工作得很好,零售商可以有很多分店,而一个分店只能有一个零售商。当试图让 Sonata Admin (SonataAdminBundle) 很好地处理这种关系时,困难的部分就发生了。它们最简单的形式如下所示:
零售商实体
/**
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* Relation
*
* @ORM\OneToMany(targetEntity="RetailerBranches", mappedBy="Retailer", cascade={"persist"})
*/
protected $branches;
public function __construct() {
$this->branches = new ArrayCollection();
}
RetailerBranches 联接表
/**
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\JoinColumn(name="Retailer_ID", referencedColumnName="ID", nullable=false)
* @ORM\ManyToOne(targetEntity="Retailer", inversedBy="branches")
*/
private $retailer;
/**
* @ORM\JoinColumn(name="Branch_ID", referencedColumnName="ID", nullable=false, unique=true)
* @ORM\OneToOne(targetEntity="Branch", inversedBy="retailer")
*/
private $branch;
分支实体
/**
* @ORM\Column(name="ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* Relation
*
* @ORM\OneToOne(targetEntity="RetailerBranches", mappedBy="branch", cascade={"persist"})
*/
private $retailer;
当尝试生成表单以使这种关系形成时,困难的部分发生了:
零售商管理
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->with('Branches')
->add('branches', 'sonata_type_collection', array(
'required' => false,
'by_reference' => false
), array(
'edit' => 'inline',
'inline' => 'table',
))
->end()
;
}
RetailerBranchesAdmin
protected function configureFormFields(FormMapper $formMapper)
{
if ($this->hasRequest()) {
$link_parameters = array('context' => $this->getRequest()->get('context'));
} else {
$link_parameters = array();
}
$formMapper
->add('succursale', 'sonata_type_model_list', array(
'class' => 'VeloRetailerBundle:Branch',
'required' => false,
), array(
'edit' => 'inline',
'inline' => 'table',
))
;
}
问题:
所有这些工作,这是一个截图:
有一家零售商及其分支机构。耶。
问题 1:底部的“添加新”按钮尝试添加一个 RetailerBranches 对象,而不是一个简单的 Branch 对象,这显然不起作用。
问题 2:此方法也不允许用户修改内联分支。
我觉得我已经接近解决方案了,但我就是不能完全做到。任何帮助将不胜感激!
【问题讨论】:
-
又是这首奏鸣曲……我看到很多人为它奋斗的时间比自己写这些东西的时间还要长。为什么你需要它?如果你需要像 Sonata 这样的东西,你可能需要一个 CMS,而不是一个框架。
-
这就是我要做的。这是一段简洁的代码,但是文档太差了。
-
我找到了另一种方法来完成这项工作,明天将继续工作并发布我的发现。
-
我使用 Sonata Admin 已有半年了,遇到了许多未记录的用例。但它是在开源项目中,很多人在改进和添加新功能方面做得很棒。这就是为什么我采用用例,与贡献者讨论最佳实践并将它们添加到文档中。这是一个简单的 GitHub fork 并添加了一些行。欢迎加入@Pier-Luc Gendreau 和 Elnur Abdurrakhimov。 :)
标签: symfony doctrine-orm symfony-sonata sonata-admin