我有一个有多张照片的实体:
/**
* 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/