2014-03-03 106 views
0

我有3个实体,其中两个(与Sonata管理员)在第三个通过一对多的关系,也有额外的领域引用。第一实体是基本上管理记者的记者,第二实体是管理事件的事件。最后一个管理员是JournalistEvent,它有记者表示他们想要报道事件,并且还包括像isApproved等额外字段。Sonata管理员头脑风暴

我想在Event Admin中创建一个自定义列表操作,以显示参加该事件的记者。我如何去做呢?

我是否在事件管理员上创建自定义操作,或者是否在记者管理员上创建自定义查询以过滤参与该事件的记者?我对前者有了一个想法,但后者似乎是创建解决方案的更好方式。

+0

所以基本上你想要在列表视图中显示你的子实体? – NoScope

+0

很多是的 –

+1

在您的管理员类中,您可以在show功能中设置'parent.children',并且您可以传递一个自定义模板。 – NoScope

回答

1

您可以先列出事件,然后您可以使用sonata_type_collection表单类型列出参加每个事件的记者。如果您想过滤掉事件列表,您可能必须为此编写自定义查询。您可以将以下功能添加到管理员类中。

public function createQuery($context = 'list') 
{ 
    $query = parent::createQuery($context); 
    $query 
      ->orderBy($query->getRootAlias().".eventName", "ASC") 
      ->andWhere(
       $query->expr()->orX(
        $query->expr()->eq($query->getRootAlias().".isActive", 1), 
        $query->expr()->isNull($query->getRootAlias().".isActive"))); 

    return $query; 
} 

这只是一个示例查询。你将不得不修改它。希望能帮助到你。

+0

我正在考虑更多沿着这些行,我可以在事件中创建一个行动,基本上给你一个这样的查询过滤记者名单。一个'parent.child'自定义模板也可以工作,只需要一个快速而干净的解决方案 –