我有一个名为Profile的实体,与Category有关系。两者都由company_id限制。
创建新的个人资料时,我只想显示我的company_id中可能的类别。
CategoryRepository具有以下方法:
/**
* @return Category[] Returns an array of Category objects
*/
public function findByCompany($value)
{
dump($value);
return $this->createQueryBuilder('p')
->where('p.company = :val')
->setParameter('val', $value)
->getQuery()
->getResult()
;
}
这类别的索引,其中它列出我公司类别使用时的方法,可以正常工作。
但是,并不是在创建一个配置文件,我需要的关系。
ProfileType形式如下:
$builder
->add('name')
->add('type')
->add('serial')
->add('sgin')
->add('sensor', EntityType::class, [
'class'=>'App\Entity\Sensor',
'choice_label' => 'name',
])
->add('category', EntityType::class, [
'class'=>'App\Entity\Category',
'choice_label' => 'name',
'query_builder' => function (CategoryRepository $er) use($user) {
return $er->findByCompany($user);
},
])
据我所知,这里的$ user应该持有$ this-> getuser()(因为这样我可以叫getCompany),或者传递整个公司实体。传递ID本身似乎无效,我尝试手动进行。
答案 0 :(得分:1)
在控制器中,为您的createForm()
函数设置一个选项,以获取用户的ID:
'userId' => $this->getUser()->getId()
然后,在buildform()
上方的$builder->add(...)
函数的ProfileType.php中,使用户通过您在控制器中设置的选项,如下所示:
$userId = $options['userId'];