【问题标题】:Load Symfony Form Entity type from Entity从实体加载 Symfony 表单实体类型
【发布时间】: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。

但也许我只是完全错误地解决了这个问题。感觉我做得不对,但我的大脑卡住了。

【问题讨论】:

标签: php symfony


【解决方案1】:

我想您不会对用户保留关于他是什么类型的用户或他可以是多个用户的参考。据我所知,您可能想要一些类似的东西?

    return $this->getEntityManager()->createQueryBuilder()
        ->select('sc.contact') //you can add 'c.name' etc but you need to select something from the base table which is school
        ->from('MySchoolBundle', 'sc')
        ->join('sc.contact', 'c')
        ->join('sc.admin', 'a')
        ->where('a.id = :id')
        ->setParameter(array('id' => $adminId));
    ;

【讨论】:

  • 这似乎是有道理的。我会试试这个并标记它是正确的。
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2015-11-01
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多