0

对象Article

 /**
 * @var Collection
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Photo", mappedBy="article", cascade={"persist"})
 */
private $photos;

Photo其一侧的物体有

/**
 * @var Article
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Article", inversedBy="photos")
 */
private $article;

我有一个 object 的形式Article,其中包含 objectPhoto的形式如下:

//article form building
->add('photos', CollectionType::class, [
            'allow_delete' => true,
            'allow_add' => true,
            'entry_type' => PhotoType::class,
            'entry_options' => [
                'label' => false,
            ]
        ])

在我PhotoType

/**
 * {@inheritdoc}
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('image', ImageType::class, [
            'context' => 'photo',
        ])
        ->add('description')
        ->add('url')
...

但是如何article在表单中设置字段Photo?这样我就可以使用article_id表格中定义的列创建照片?目前在此表单中创建的所有照片都有 article_id NULL,换句话说,他们没有设置它

4

1 回答 1

1

在您的加法器中,您需要设置 ID:

public function addPhoto(Photo $photo)
{
    if (!$this->photos->contains($photo)) {
        $this->photos[] = $photo;
        $photo->setDocument($this);
    }

    return $this;
}

在您的表单中,您需要设置:'by_reference' => falsehttps ://symfony.com/doc/current/reference/forms/types/collection.html#by-reference

类似地,如果您使用 CollectionType 字段,而您的基础集合数据是一个对象(例如 Doctrine 的 ArrayCollection),那么如果您需要添加器和移除器(例如 addAuthor() 和 removeAuthor()),则必须将 by_reference 设置为 false叫做。

于 2017-07-27T08:34:33.563 回答