在选择类型 Symfony 5 中显示相关实体中的特定字段
Posted
技术标签:
【中文标题】在选择类型 Symfony 5 中显示相关实体中的特定字段【英文标题】:Show specific fields in related entities in choicetype Symfony 5 【发布时间】:2021-11-15 03:30:48 【问题描述】:我正在生成一个表单,它的字段与许多实体相关,例如,如果 Entity Gerance 的相关列与 NatRec 实体中的列相同,我只能显示实体 NatRec 中的某些字段。下面的代码可以告诉你事情是如何工作的:
实体 Gerance.php
<?php
// Entity Gerance
namespace App\Entity;
use App\Repository\GeranceRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=GeranceRepository::class)
*/
class Gerance
/**
* @ORM\Id
* @ORM\Column(name="CODEGERA")
*/
private $id;
/**
* @ORM\Column(type="string", length=30)
*/
private $LIBEGERA;
/**
* @ORM\Column(type="string", length=1)
*/
private $NUMEGERA;///// related to NatRec
public function getId(): ?string
return $this->id;
public function getLIBEGERA(): ?string
return $this->LIBEGERA;
public function setLIBEGERA(string $LIBEGERA): self
$this->LIBEGERA = $LIBEGERA;
return $this;
public function getNUMEGERA(): ?string
return $this->NUMEGERA;
public function setNUMEGERA(?string $NUMEGERA): self
$this->NUMEGERA = $NUMEGERA;
return $this;
实体 NatRec.php
<?php
namespace App\Entity;
use App\Repository\NatRecRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass=NatRecRepository::class)
*/
class NatRec
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer", name="CODNATRE")
*/
private $id;
/**
* @ORM\Column(type="string", length=150, nullable=true)
*/
private $LIBNATRE;
/**
* @ORM\Column(type="string", length=1)
*/
private $NUMEGERA;
/**
* @ORM\Column(type="string", length=200)
*/
private $LIBELLE;
public function getId(): ?int
return $this->id;
public function getLIBNATRE(): ?string
return $this->LIBNATRE;
public function setLIBNATRE(?string $LIBNATRE): self
$this->LIBNATRE = $LIBNATRE;
return $this;
public function getNUMEGERA(): ?string
return $this->NUMEGERA;
public function setNUMEGERA(?string $NUMEGERA): self
$this->NUMEGERA = $NUMEGERA;
return $this;
public function getLIBELLE(): ?string
return $this->LIBELLE;
public function setLIBELLE(string $LIBELLE): self
$this->LIBELLE = $LIBELLE;
return $this;
并且选择的字段必须是相关的。 Image of the select fields
Image of the select fields
由于数据库产生的问题,我无法让实体在原则上相互关联,所以我只能比较每个实体的字段。
ReclamationType.php:
<?php
namespace App\Form;
use App\Entity\Gerance;
use App\Entity\NatRec;
use App\Entity\Reclamation;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class ReclamationType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
$builder
->add('nom')
->add('adressere')
->add('numetelep')
->add('numerofax')
->add('adresmail')
->add('objreclam')
->add('numegera', EntityType::class, [
'class' => Gerance::class,
'choice_label' => 'LIBEGERA'
])
->add('codnatre', EntityType::class,[
'class' => NatRec::class,
'choice_label' => 'LIBNATRE'
])
->add('prenom')
->add('cin')
->add('datesais')
->add('codeclie')
->add('usersais')
->add('codesect')
;
public function configureOptions(OptionsResolver $resolver)
$resolver->setDefaults([
'data_class' => Reclamation::class,
]);
希望有人可以帮助我解决这个问题。
【问题讨论】:
澄清一下,你想要一个“依赖选择字段”吗? (这将是这样的:drupal.org/files/demonstration.gif) @yvesb 是的!我实际上设法使用 ajax 找到了解决方案,javascript 确实让事情变得更容易,谢谢! 【参考方案1】:所以我碰巧找到了一个解决方案,方法是从我需要的实体的存储库中获取我想要显示的所有数据,并通过获取元素 id 并更改那里的值在 JavaScript 中创建条件,这只是使用 Symfony 的有点困难表单,因为在我检查元素之前我不知道如何获取所选选项的 id。很高兴我能自己回答这个问题。
【讨论】:
以上是关于在选择类型 Symfony 5 中显示相关实体中的特定字段的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 5 和 Doctrine,找不到使用 3 个相关实体获取结果的方法
Symfony2 表单 > 实体字段类型 > 查询构建器 > 可能的子选择?
Symfony 表单 - 在 CollectionType 中的子条目类型中访问实体
Symfony:必须管理传递给选择字段的“App\Entity\Classement”类型的实体。也许您忘记将其保留在实体管理器中?