情况如下:
我有 3 个表(一对多):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);
如果我只是呈现表单,我只会看到标签,那些被选中的信息不会被传输(因为它在我管理的中间表中),因此不会显示。
我需要使用我的一对多架构来解决这个问题。表格配置错了吗?请帮忙。:)