【问题标题】:Entity field type symfony 2.0 - show data from database in edit action实体字段类型 symfony 2.0 - 在编辑操作中显示来自数据库的数据
【发布时间】:2013-04-04 08:34:16
【问题描述】:

情况如下:

我有 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,
        ))

这是我在 create action 中保存它的方式:

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);

如果我只是渲染表单,我只会看到标签,那些被选中的信息不会被传输(因为它在我管理的中间表中),因此不会显示。

我需要使用我的一对多架构来解决这个问题。表格配置错了吗?请帮忙。 :)

【问题讨论】:

    标签: symfony doctrine-orm symfony-forms


    【解决方案1】:

    我终于找到了答案:

    只需要做到以下几点:

        $collection = new ArrayCollection();
        $labels = $entity->getProductLabels();
        if (!empty($labels)) {
            foreach ($labels as $label) {
                $collection->add($label->getLabelTag());
            }
        }
    
        $form->get('productLabels')->setData($collection); 
    

    检索单个对象(LabelTag),将其放入数组集合中,将集合传递给表单字段的数据,然后就完成了。

    显示表单并显示所选选项。

    【讨论】:

      猜你喜欢
      • 2013-10-27
      • 2011-08-12
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多