Symfony Form + EntityType Field + oTm> mTo <oTm отношение = неправильный тип при сохранении - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть система тегов, установленная как OneToMany ManyToOne OneToMany, например:

ПУНКТ OneToMany в TAGS

ПОВЕДЕНИЕ ManyToOne в TAG и ПУНКТ

TAG OneToMany в TAGS

Поле формы ITEM для этого отношения EntityType из TAG, поэтому у меня есть список доступных тегов из базы данных на выбор

Когда я сохраняю свойформа, которую я получаю Expected value of type "App\Entity\tags" for association field "App\Entity\Item#$tags", got "App\Entity\Tag" instead.

Я не понимаю, потому что я использую EntityType, поэтому доктрина должна знать, что это отношение, и автоматически создавать объект TAGS?Как мне сказать Symfony автоматически преобразовать мой TAG объект в TAGS объект отношения?

Должен ли я вместо этого делать CollectionType?Это кажется неуместным в этом случае ...

вот моя форма ТИП:

->add('tags', EntityType::class, array(
        'class' => \App\Entity\Tag::class,
        'query_builder' => function (EntityRepository $er) {
              return $er->createQueryBuilder('tag')
               ->orderBy('tag.name', 'ASC');
         },
         'expanded' => true ,
         'multiple' => true,
   ))

ЭЛЕМЕНТ ПУНКТА

 /**
 * @ORM\OneToMany(targetEntity="tags", mappedBy="item")
 */
private $tags;

ЛОГИШКА ТЕГОВ

 /**
 * @var int
 *
 * @ORM\ManyToOne(targetEntity="Item", inversedBy="tags")
 * @ORM\JoinColumn(name="item_id")
 */
private $item;

/**
 * @var int
 *
 * @ORM\ManyToOne(targetEntity="Tag", inversedBy="items")
 * @ORM\JoinColumn(name="tag_id", referencedColumnName="id")
 */
private $tag;

TAG ENTITY

 /**
 * @ORM\OneToMany(targetEntity="tags", mappedBy="tag")
 *
 */
private $items;

1 Ответ

0 голосов
/ 26 декабря 2018

Вы должны встроить вторую форму в качестве Типа коллекции, затем добавить allow_add, если хотите добавить новые теги к вашей сущности. ПУНКТ:

$builder->add('tags', CollectionType::class, array(
        'entry_type' => TagType::class,
        'entry_options' => array('label' => false),
        'allow_add' => true,
    ));

проверьте документы здесь

...