SonataAdminBundle model_type值以过滤器形式过滤

str*_*ker 5 symfony symfony-sonata sonata-admin

我有这样的领域

    /**
     * @ORM\ManyToOne(targetEntity="Town")
    **/
    protected $town;
Run Code Online (Sandbox Code Playgroud)

和Admin类有这样的方法

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
        ...
        ->add('town', null, array('label' => 'Town'), null, array('expanded' => true, 'multiple' => true))
        ;
    }
Run Code Online (Sandbox Code Playgroud)

它给了我这样的过滤器:

symfony2 SonataAdminBundle与教义实体的完整示例 我的问题是:我可以为Town实体检索设置自定义sql\dql 吗?例如,只选择ID为IN(1,2)的城镇?

str*_*ker 8

好,我知道了.这是一个解决方案:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
    ...
    ->add('town', null, array('label' => 'Town'), null, array(
        'expanded' => true,
        'multiple' => true,
        'query_builder' => function (\Doctrine\ORM\EntityRepository $repository) {
            return $repository->createQueryBuilder('t')
                    ->where('t.id = ?1')
                    ->setParameter(1, 1)
                    ->add('orderBy', 't.name ASC');
        }
    ))
    ...
    ;
}
Run Code Online (Sandbox Code Playgroud)