状況は次のとおりです。
3 つのテーブル (1 対多) があります: Product、ProductLabel、LabelTag (ラベルは予約済みです ---)
ご想像のとおり、製品には多くのラベルを付けることができます。
これで、使用可能なラベルを表示するフォーム プロダクトができました。私の新しいアクションと作成アクションでは、選択したラベルを表示して保存することができました。データベースから編集アクションでラベルを表示し、選択したラベルを表示しようとすると、問題が発生します。
いくつかのコード:
エンティティ製品:
/**
* @var Doctrine\Common\Collections\ArrayCollection $productLabels
*
* @ORM\OneToMany(targetEntity="Labeyrie\Bundle\MainsiteBundle\Entity\ProductLabel", mappedBy="product")
*/
protected $productLabels;
エンティティ ラベル タグ:
/**
* @var Doctrine\Common\Collections\ArrayCollection $productLabels
*
* @ORM\OneToMany(targetEntity="Labeyrie\Bundle\MainsiteBundle\Entity\ProductLabel", mappedBy="labelTag")
*/
protected $productLabels;
エンティティの製品ラベル:
/**
* @var Labeyrie\Bundle\MainsiteBundle\Entity\Product $product
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Labeyrie\Bundle\MainsiteBundle\Entity\Product", inversedBy="productLabels")
*/
protected $product;
/**
* @var Labeyrie\Bundle\MainsiteBundle\Entity\LabelTag $labelTag
*
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Labeyrie\Bundle\MainsiteBundle\Entity\LabelTag", inversedBy="productLabels")
*/
protected $labelTag;
製品形態:
->add('productLabels', 'entity', array(
'class' => 'LabeyrieMainsiteBundle:LabelTag',
'property' => 'title',
'multiple' => true,
'expanded' => true,
))
作成アクションで保存する方法は次のとおりです。
if ($form->isValid()) {
/* save product */
$em->persist($product);
$em->flush();
/* save product labels */
$labels = $product->getProductLabels();
if (!empty($labels)) {
foreach ($labels as $label) {
$productLabel = new ProductLabel();
$productLabel->setLabelTag($label);
$productLabel->setProduct($product);
$em->persist($productLabel);
}
}
$em->flush();
}
それで問題ありません。
問題は私の編集アクションにあります:
$entity = $em->getRepository('MyProjectBundle:Product')->find($id));
$form = $this->createForm(new ProductType(), $entity);
単にフォームをレンダリングすると、ラベルのみが表示され、どのラベルが選択されたかという情報は送信されず (私が管理する中央のテーブルにあるため)、表示されません。
1 対多のアーキテクチャを使用してこれを解決する必要があります。フォームの構成が間違っていませんか? 助けてください。:)