gpt4 book ai didi

symfony - 使用SonataAdminBundle。在两步相关实体上配置过滤器

转载 作者:行者123 更新时间:2023-12-04 10:01:11 29 4
gpt4 key购买 nike

我想知道天气是可能的,以及如何使用Symfony 2中的SonataAdminBundle为 ListView 配置过滤器,如下所示

假设我有实体Order,指向实体User,指向实体Company。
我想配置过滤器,以便按用户过滤以及按公司(用户公司)过滤
首先是直截了当。第二点是我试图澄清的问题。

在OrderAdmin类中,我将configureDatagridFilters覆盖为:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('created_at')
//... some other filters on Order fields, as usual

// the filter on User, provided 'user', no ploblem
->add('user')

// and the filter by Company
->add('user.company') // this doesn't work, of course
;
}

该公司过滤器的语法由sonta docs表示: http://sonata-project.org/bundles/doctrine-orm-admin/2-0/doc/reference/filter_field_definition.html

不适合我尝试完成的内容,但找不到要看的地方。

希望有人对此有所了解。

谢谢

最佳答案

最终,我找到了另一个问题指导的答案:How can I create a custom DataGrid filter in SonataAdmin,并仔细阅读了我在问题中粘贴的Sonata admin文档链接。

如果有人遇到此问题,并以前面的示例为例:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper

//... whatever filter

// and the filter by Company

->add('company', 'doctrine_orm_callback', array(
'callback' => array($this, 'callbackFilterCompany'),
'field_type' => 'checkbox'
),
'choice',
array('choices' => $this -> getCompanyChoices())
;
}

其中的getCompanyChoices方法检索公司ID =>公司名称的关联数组(例如)。并且方法callbackFilterCompany如下
public function callbackFilterCompany ($queryBuilder, $alias, $field, $value)
{
if(!is_array($value) or !array_key_exists('value', $value)
or empty($value['value'])){

return;

}

$queryBuilder
->leftJoin(sprintf('%s.user', $alias), 'u')
->leftJoin('u.company', 'c')
->andWhere('c.id = :id')
->setParameter('id', $value['value'])
;

return true;
}

关于symfony - 使用SonataAdminBundle。在两步相关实体上配置过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13311600/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com