Symfony 如何在sonata bundle管理列表视图中包含实体联接

Symfony 如何在sonata bundle管理列表视图中包含实体联接,symfony,fosuserbundle,sonata-admin,Symfony,Fosuserbundle,Sonata Admin,相关代码: in services.yml sonata.admin.domain: class: MyBundle\AdminBundle\Admin\MyAdmin tags: - { name: sonata.admin, manager_type: orm, group: "Domains", label: "Domains" } arguments: - ~ - My

相关代码:

in services.yml

sonata.admin.domain:
        class: MyBundle\AdminBundle\Admin\MyAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Domains", label: "Domains" }
        arguments:
            - ~
            - MyBundle\ServiceBundle\Entity\MyEntity
            - ~
        calls:
            - [ setTranslationDomain, [MyOtherBundle]]
在我的管理控制器中:

 protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->add('domain')
            ->add('user.email')
            ->add('_action', 'actions', array(
                             'actions'  => array(
                                                 'show' => array())));

    }
以下哪些错误:

Notice: Undefined index: user

为了进一步描述这个问题,我有一个表,其中有一个user_id列,我希望能够使用fos user bundle将用户的电子邮件地址包含在该表的同一列表中。我也尝试过自定义查询,但没有成功。提前感谢

以下是有关列表视图定义的官方文档:

如果您的实体中有一个用户id,我猜您的实体是fosUserBundle的覆盖,对吗

因此,通常您可以直接从列表字段定义访问,如下所示:

->add('user.email') // user is you entity object

否则,如果它是一个具有用户id的独立实体,您可能会在该实体和拥有您的fosuserbundle对象的实体之间存在关系,并且与上面的列表字段定义一样,您通常应该访问对象电子邮件。

我不确定为什么我会因为问这个问题而被否决。我似乎在任何地方都找不到答案。我已经一遍又一遍地阅读了这些内容,从过去的调试中,我意识到实体本身没有正确的注释映射。目前,用户id只是一个bigint独立用户id,没有ORM映射。还有简单的方法吗?我担心,如果我删除该用户ID并加入一对多用户映射,它将破坏现有应用程序的大部分。它肯定会破坏现有数据。。。但是,您可以通过创建另一列来修复此问题,该列映射到您的用户实体,然后循环遍历每个对象,根据您的用户id正确更新它们。最后,您将能够删除bigint列,并接受此作为答案。谢谢你的帮助!:因此,我实际上找到了一种更好的方法,无需更改应用程序的核心实体,我只需在postgresql中创建一个视图,然后创建一个映射到该视图的实体。在那之后,我唯一的缺点是postgresql中的视图不能有主键,而doctrine需要主键,因此我最终只使用视图中的一个唯一字段作为@ORM\Id,这导致doctrine停止抱怨:我们根本不使用doctrine来更新模式,所以对于我们的用例来说没问题,但我很高兴你为其他人写了这篇文章。