我现在已经打我的头撞在墙上了无数个小时,我希望这样能有所帮助!
我有工作得很好,零售商可以有很多分支,一个分支只能有一个零售商零售商,分公司和RetailerBranches实体。 试图让索纳塔管理员(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;
试图生成表单,让这种关系初具规模的时候比较困难的部分情况:
RetailerAdmin
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对象,而不是一个简单的分公司对象,显然是行不通的。
问题2:该方法还不允许用户修改一个分支内联。
我觉得我接近的解决方案,但我不能完全到达那里。 任何帮助将不胜感激!