私は今、数え切れないほどの時間、壁に頭をぶつけてきました。SOがお役に立てば幸いです。
私にはRetailer、Branch、RetailerBranchesのエンティティがあり、正常に機能しています。小売業者は多くの支店を持つことができ、支店は1つの小売業者しか持つことができません。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;
その関係を形にするためにフォームを生成しようとすると、より難しい部分が発生します。
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:下部にある[新規追加]ボタンは、明らかに機能しない単純なBranchオブジェクトの代わりにRetailerBranchesオブジェクトを追加しようとします。
問題2:この方法では、ユーザーがブランチをインラインで変更することもできません。
私は解決策に近づいているように感じますが、私はそこに完全に到達することはできません。どんな助けでも大歓迎です!