如何从数据库中手动设置Sonata Admin ListMapper中的属性

时间:2016-03-25 18:56:40

标签: symfony doctrine sonata-admin

我的模型有一个名为Application的“父”实体和一个名为“role”的“子”实体,它通过ManyToOne关系连接到应用程序。

但是,出于性能原因,Application与Role没有反向的“oneToMany”关系。

我要做的是将角色实体加入应用程序的Sonata管理员列表中的应用程序实体。

我最接近的是在applicationAdmin类上使用createQuery,如下所示:

public function createQuery($context = 'list'){
    $query = parent::createQuery($context);
    $query
        ->leftJoin('fnBundle:Role','r','WITH','r.application = ' . $query->getRootAlias() . '.id')
        ->leftJoin('fnBundle:User','u','WITH','ar.user = u')
        ->addSelect('u.email');
    return $query;
}

这会因以下错误而死:

  

“警告:get_class()期望参数1为对象,给定数组”   在“SonataAdminBundle:CRUD:base_list_field.html.twig”

我相信(虽然我很难证明)这是因为返回应用程序对象嵌套在一个带有两个键的数组中,如

array(0 => <Application Object>, 1 => <User Email>);

而不仅仅是应用程序对象。

那么我该如何解决这个问题呢?我可以选择u.email AS作为应用程序的属性(我不这么认为,我一直在寻找解决方案)...我应该以某种方式覆盖DataGrid,还是没有优雅的解决方案来解决这个问题?

谢谢!

0 个答案:

没有答案