我在表单构建器中有这个:
$form->add('region', EntityType::class, array(
'class' => 'AppBundle:Regions',
'placeholder' => '',
'required' => false,
'query_builder' => function (EntityRepository $er) use ($country_2a) {
return $er->createQueryBuilder('s')
->where('s.countryId= :country_id')
->setParameter('country_id', $country_2a)
->addOrderBy('s.name');
}
));
案例是在实体区域中我有country_id但我收到country_2a,然后在运行createBuilder之前我需要在实体的国家/地区搜索code_2a的id。
我已经在实体中声明了这种关系:
Countries Entity:
/**
* @ORM\OneToMany(targetEntity="Regions", mappedBy="country_id")
*/
private $regions;
public function __construct() {
$this->regions = new ArrayCollection();
}
Regions Entity:
/**
* @var int
*
* @ORM\Column(name="country_id", type="integer")
* @ORM\ManyToOne(targetEntity="Countries", inversedBy="id")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id")
*/
private $countryId;
我不知道如何设法在实体之间使用这种关系,我尝试过JOIN LEFT和subselect但没有任何效果。
也许我的问题是我需要访问国家/地区实体,但是$ er连接到Regions实体,或者如何创建createQueryBuilder语句来利用显示的关系。
有什么建议吗?
答案 0 :(得分:0)
你的区域实体应该是这样的:
/**
* @var int
*
* @ORM\Column(name="country_id", type="integer")
* @ORM\ManyToOne(targetEntity="Countries", inversedBy="regions")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id")
*/
private $countryId;
尝试改变。