我正在使用sonata admin bundle for admin panel。我想通过查询在configureListFields中显示数据。我有表userChoiceProduct和字段: -
User_Id
Product_Id
当用户选择任何产品并提交表单时,这些字段会自动填写。但是这些字段与其他表没有任何关系。我想在configureListFields中显示用户电子邮件和产品名称 基于User_Id和Product_Id。
谢谢!
答案 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_。