如何解决使用集合处理Formbuilder上的OneToMany字段
我有两个与OneToMany字段相关的实体,并且有一个formbuilder问题
NUCLEI实体
class Nuclei
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id",type="integer",nullable=false)
* @ORM\GeneratedValue(strategy="IDENTITY")
* @ORM\SequenceGenerator(sequenceName="datinuclei_id_seq",allocationSize=1,initialValue=1)
*/
private $id;
/**
* @var Tag
*
* @ORM\OneToMany(targetEntity="Tag",mappedBy="nucleo",orphanRemoval=true,cascade={"persist"})
* @ORM\JoinColumn(name="idnucleo",referencedColumnName="id")
*/
private $codicitag;
public function __construct()
{
$this->codicitag = new ArrayCollection();
}
public function addCodiciTag(Tag $tag): self
{
if (!$this->codicitag->contains($tag)) {
$this->codicitag[] = $tag;
$tag->setNucleo($this);
}
return $this;
}
TAG实体
class Tag
{
/**
* @var int
*
* @ORM\Id
* @ORM\Column(name="id",nullable=false)
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="codicetag",type="string",nullable=false)
*/
private $codicetag;
/**
* @var Nuclei
*
* @ORM\ManyToOne(targetEntity="Nuclei",inversedBy="codicitag",referencedColumnName="id")
*/
private $nucleo;
我要在其中插入/编辑Nuclei实体的FormBuilder
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder->add('codicitag',CollectionType::class,[
'entry_type' => Tag::class,'allow_add' => true,]);
每个NUCLEI可以有许多关联的TAG,但是我收到此错误 我找不到有关此的任何示例或文档:((
无法加载类型“ App \ Entity \ Tag”:类未实现“ Symfony \ Component \ Form \ FormTypeInterface”。
////////////////
如Dohs所建议的那样,我创建了一个带有object_type“ Tag”的ColletionType
$builder->add('codicitag',[
'entry_type' => TagType::class,'label' => false,'mapped' => false,'by_reference' => false
]);
这是TagType类
class TagType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder
->add('id',HiddenType::class);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Tag::class,]);
}
}
我创建了隐藏类型并与jquery一起玩的输入类型,所以我有类似的东西
<input type="hidden" id="nuclei_codicitag_0_id" name="nuclei[codicitag][0][id]" value="9287">
值已正确传递给控制器,但会引发我不明白的错误
在执行带有参数的“ [INSERT INTO infonuclei(id,codicetag,attivata,progressivo,idcomune,idnucleo))值(?,?,?,?,?,?)时发生异常” [9287,null, null,null,null,23748]:
我不想在“ TAG”实体上插入新记录,而只想编辑/插入另一个实体NUCLEI,我的实体映射有问题
解决方法
尝试添加此内容:
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder->add('codicitag',EntityType::class,[
'class' => Tag::class,'choice_label' => 'name','expanded'=>true,'multiple'=>true,'by_reference'=>false,]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。