php - Symfony 表单集合不保存引用

标签 php symfony doctrine-orm

我有一个有多张照片的实体:

/**
 * related images
 * @ORM\OneToMany(targetEntity="Photo", mappedBy="entity",cascade={"persist"})
 * @ORM\OrderBy({"uploaded_at" = "ASC"})
 */
private $photos;

照片与实体存在多对一关系

    /**
 * @ORM\ManyToOne(targetEntity="Acme\AppBundle\Entity\Entity", inversedBy="photos")
 * @ORM\JoinColumn(name="entity_id", referencedColumnName="id", onDelete="CASCADE")
 */
private $entity;

所有 setter 和 getter 都已设置 我正在阅读 symfony 集合文档:http://symfony.com/doc/current/reference/forms/types/collection.html

表单类型:

             ->add('photos', 'collection', array(
             'type' => new PhotoFormType(),
             'allow_add' => true,
             'by_reference' => false,
             'allow_delete' => true,
             'prototype' => true

         ))

照片类型:

        $builder
        ->add('title', null, ['label' => 'front.photo.title', 'required' => true])
        ->add('image', 'file', array('required' => false))
    ;

对于上传,我使用的是 vichUploadableBundle,图像保存得很好,但 entity_id 没有保存并且为空。我不知道我在这里错过了什么。

最佳答案

以下是迄今为止使用 symfony 表单组件调查或研究此问题的最佳解决方案。

表单类型:

     ->add("photos",'collection', array(
            'type' => new PhotoFormType(),
            'allow_add' => true,
            'allow_delete' => true,
            'by_reference' => false
))

实体类

public function addPhoto(Photo $photo)
{
    $photo->setEntity($this);
    $this->photos->add($photo);        
}

public function removePhoto(Photo $photo)
{
    $this->photos->removeElement($photo);
}

最佳做法是不要使用循环手动绑定(bind)引用实体。请记住 by_reference 必须为 false。像 'by_reference' => false。

关于php - Symfony 表单集合不保存引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29647039/

相关文章:

php - jQuery.ajax() 的 "success"回调能否区分对同一个脚本的两次调用?

php - 与两个不同表的单表关系

php - 在mysql中选择查询时如何显示正确的时间戳?

php - 带有异国情调连接的 Doctrine 2 分页器抛出错误

php - 教义2中的子查询 notIN 函数

PHP Post数组数组

php - 在 CakePHP 中使用 $form->inputs() 时指定日期格式

php - Paypal WPS 凭据

php - symfony2 该网页有一个重定向循环

php - 原则 2 - 一对多单向