【发布时间】:2016-03-21 19:38:03
【问题描述】:
我正在尝试找出使用来自实体的数据加载 Symfony 表单实体类型的正确方法。
我拥有的实体是用户和学校。
用户是可以访问应用程序的任何人。但用户可以是 School.principal 或 School.contact 或 School.admin
现在假设我以管理员身份登录,我想添加另一所学校。在展示新的学校表格时,我希望有一个下拉菜单,显示此管理员学校的所有现有联系人。
School.contact 是一个用户实体,例如 School。校长和 School.admin
我不知道如何为表单构建器创建 QueryBuilder。我需要查询所有登录用户的学校并为每个学校拉出 School.contact。我正在努力寻找在 Symfony 中执行此操作的正确方法。
在表单生成器中,我正在寻找这样做。
->add('contact', EntityType::class, array(
'label'=>'Contact',
'class'=>'MySecurityBundle:User',
'query_builder'=>function(EntityRepository $er) use ($userid) {
return $er->getContacts($userid);
}
))
在 MySecurityBundle:User 中,我定义了 getContacts。
public function getContacts($userid) {
$schools = $this->getEntityManager()->getRepository('MySchoolBundle:School')->findById($userid);
$uids = array();
foreach ($schools as $p) {
$uids[] = $p->getContact()->getId();
}
return $this->getEntityManager()->createQueryBuilder()
->select('c')
->from('MySecurityBundle:User', 'c')
->where('c.id IN (:ids)')
->setParameter('ids', $uids)
;
}
似乎我应该能够进行连接,而不是拉动所有学校并获取联系人 ID 以通过管道输入查询。连接的所有示例似乎都与同一个表连接。我在加入其他表格时看不到太多。我可以用 DQL 做我想做的事,但我不确定如何从 DQL 到表单构建实体类型期望看到的 QueryBuilder。
但也许我只是完全错误地解决了这个问题。感觉我做得不对,但我的大脑卡住了。
【问题讨论】:
-
在此处查看有关查询生成器的文档:doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/…