如何解决Symfony 4 形式:“必须管理传递给选择字段的“Doctrine\Common\Collections\ArrayCollection”类型的实体
问题是我希望正在创建新供应商的用户通过勾选复选框来选择许多产品部件。然后,这会将供应商与这些部件相关联。我想使用供应商零件实体作为两者(供应商和产品零件)之间的中间实体。我不断收到标题中提到的错误。是我最初通过循环错误的产品来创建表单的方式还是我映射实体的方式?如果需要任何其他代码来全面了解问题,请告诉我。
这是我的供应商类型,以供应商零件类型作为集合。
->add('supplierParts',CollectionType::class,[
'entry_type' => SupplierPartType::class,'allow_add' => true,'by_reference' => false
])
这是我的供应商零件类型
class SupplierPartType 扩展 AbstractType {
public function buildForm(FormBuilderInterface $builder,array $options)
{
$builder
->add('partPrice',NumberType::class,[
'label' => 'Price','required' => false,'attr' => [
'class' => 'form-control'
]
])
->add('part',EntityType::class,[
'class' => ProductPart::class,'choice_label' => 'partNumber','attr' => [
'class' => 'form-control',],'expanded' => true,'multiple' => true,]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => SupplierPart::class,'supplier' => null,'forEdit' => null,]);
}
}
这是我与供应商零件的供应商实体关系
/**
* @ORM\ManyToMany(targetEntity="App\Entity\SupplierPart",mappedBy="supplier",cascade={"persist"})
*/
private $supplierParts;
这是我的 SupplierPart 实体,具有供应商关系和 ProductPart 关系:
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Supplier",inversedBy="supplierParts",cascade={"persist"})
*/
private $supplier;
/**
* @ORM\OneToMany(targetEntity="App\Entity\ProductPart",mappedBy="supplierPart")
*/
private $productParts;
这是我的 ProductPart 实体与 SupplierPart 关系:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\SupplierPart",inversedBy="productParts")
*/
private $supplierPart;
这是我通过将 ProductParts 添加到 SupplierParts 然后保存到供应商和用户然后创建表单来创建表单的 SupplierController:
foreach ($productParts as $productPart){
$newSupplierPart = new SupplierPart();
$newSupplierPart
->addPart($productPart);
$supplier->addSupplierPart($newSupplierPart);
}
$user->setSupplier($supplier);
$form = $this->createForm(UserType::class,$user,[
'forEdit' => false,'supplierForm' => true
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。