Sonata Admin configureListFields通过查询显示

时间:2014-07-01 06:00:24

标签: symfony sonata-admin

我正在使用sonata admin bundle for admin panel。我想通过查询在configureListFields中显示数据。我有表userChoiceProduct和字段: -

User_Id
Product_Id

当用户选择任何产品并提交表单时,这些字段会自动填写。但是这些字段与其他表没有任何关系。我想在configureListFields中显示用户电子邮件和产品名称 基于User_Id和Product_Id。

谢谢!

2 个答案:

答案 0 :(得分:1)

我解决了这个问题: -

在Sonata管理员列表中: -

            ->add('User Email', null, array('template' => 'ABCAdminBundle:UserChoiceProduct:user.html.twig'))
    ->add('Product Name', null, array('template' => 'ABCAdminBundle:UserChoiceProduct:prodcut.html.twig'))

我提到了一个twig文件(user.html.twig),例如:

<td>{{object.userId|getUserDetail()}}</td>

在twig扩展名中创建getUserDetail(): -

class ABCExtension extends \Twig_Extension {

private $generator;
private $container;

public function __construct(UrlGeneratorInterface $generator, Container $container) {
    $this->generator = $generator;
    $this->container = $container;
}
public function getFilters() {
    return array(
        'getUserDetail' => new \Twig_Filter_Method($this, 'getUserDetail'),
    );
}
public function getUserDetail($userId)
{
    $em = $this->container->get('doctrine')->getManager();
    $user = $em->getRepository('ABCUserBundle:User')->findOneBy(array('id' =>$userId));
    if(empty($user)){
        $userEmail = 'User does not Exist';
        return $userEmail;          
    }else{
        $userEmail = $user->getEmail();
        return $userEmail;
    }
}
}

然后所有工作都顺利完成。

答案 1 :(得分:0)

您可以在管理员中使用createQuery方法来自定义父查询,如下所示:

public function createQuery($context = 'list') {
    $query = parent::createQuery($context);
    $query
        ->addSelect('u')
        ->leftJoin('Path\To\User\Entity', 'u', \Doctrine\ORM\Query\Expr\Join::ON, 't0_.User_Id = u.id')
    ;
    return $query;
}

通过主查询中的userChoiceProduct表的前缀获取并替换t0_。