Symfony 5嵌入表单不保留外键



我开始研究symfony,并尝试用嵌入表单在两个实体之间建立关系,我可以在我的实体内持久化新闻信息,但外键不持久化。在打扰你之前我已经到处找过了,希望有人能帮帮我。

WorkEntity.php

/**
* @ORMEntity(repositoryClass=WorkEntityRepository::class)
*/
class WorkEntity
{
/** other attribut**/
/**
* @ORMOneToMany(targetEntity=Address::class, mappedBy="workEntity",cascade={"persist"})
*/
private $address;
/**
* WorkEntity constructor.
*/
public function __construct()
{

$this->address = new ArrayCollection();
}
/**
* @return Collection|Address[]
*/
public function getAddress(): Collection
{
return $this->address;
}
/**
* @param Address $address
* @return $this
*/
public function addAddress(Address $address): self
{
if (!$this->address->contains($address)) {
$this->address[] = $address;
$address->setWorkEntity($this);
}
return $this;
}
/**
* @param Address $address
* @return $this
*/
public function removeAddress(Address $address): self
{
if ($this->address->removeElement($address)) {
// set the owning side to null (unless already changed)
if ($address->getWorkEntity() === $this) {
$address->setWorkEntity(null);
}
}
return $this;
}
}

WorkEntityController.php

/**
* @Route("/{id}/edit", name="work_entity_edit", methods={"GET","POST"})
* @param Request $request
* @param WorkEntity $workEntity
* @return Response
*/
public function edit(Request $request, WorkEntity $workEntity): Response
{
$form = $this->createForm(WorkEntityType::class, $workEntity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->getDoctrine()->getManager()->flush();
$this->addFlash('success', 'Modifié avec succès');
return $this->redirectToRoute('work_entity_index');
}
return $this->render('admin/work_entity/edit.html.twig', [
'work_entity' => $workEntity,
'form' => $form->createView(),
'current_menu' => 'work_entity',
'current_section' => 'administrative'
]);
}

WorkEntityType.php

class WorkEntityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
/**other type**/
->add('address', CollectionType::class, [
'entry_type' => AddressType::class,
'label' => 'Adresse de la société',
'entry_options' => ['label' => false],
'allow_add' => true,
'allow_delete' => true,
//                'by_reference' => false,
])
}

当我通过引用使用时,我遇到了一个问题,比如找不到依赖我的地址到workEntity的属性。
引用=>无法确定属性"地址"的访问类型;在类"AppEntity workentity"中。
如果没有by_reference,它可以保存实体内部地址,但不能保存外键。如果你知道我可以做些什么来添加外键在我的地址,我提前谢谢你。

我在多次尝试后找到了解决方案,我的错误来自我在WorkEntity中的属性地址的复数,我写这个单数。

/**
* @return Collection|Address[]
*/
public function getAddresses(): Collection
{
return $this->addresses;
}
/**
* @param Address $address
* @return $this
*/
public function addAddress(Address $address): self
{
if (!$this->addresses->contains($address)) {
$this->addresses[] = $address;
$address->setWorkEntity($this);
}

return $this;
}
/**
* @param Address $address
* @return $this
*/
public function removeAddress(Address $address): self
{
if ($this->addresses->removeElement($address)) {
// set the owning side to null (unless already changed)
if ($address->getWorkEntity() === $this) {
$address->setWorkEntity(null);
}
}
return $this;
}
Without forget my entity (inversedBy) Address.php
/**
* @ORMManyToOne(targetEntity=WorkEntity::class, inversedBy="addresses")
*/
private $workEntity;

之后,我取消注释by_reference在我的类型WorkEntityType,现在,当我在我的工作实体中添加一个地址,下面的外键保存在我的实体"地址">

最新更新