1
我正在使用Symfony2和Sonata管理软件包,但遇到了实体列表的性能问题。Sonata管理实体列表中的数据库性能问题
我有这样的实体关系到其他实体:
class Collection
{
/**
* Primary Key - autoincrement value
*
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* OWNING SIDE
*
* @ORM\ManyToOne(targetEntity="\App\Entity\Order")
* @ORM\JoinColumn(name="orderId", referencedColumnName="id")
* @var \App\Entity\Order
*/
protected $order;
/* ... */
}
在我AdminClass我想显示每个收集一些订单的详细信息及其他相关实体的信息。
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('id')
->add(
'order.number',
null,
array(
'template' => 'App:Admin:Field/order-data.html.twig',
'label' => 'Order Number'
)
);
}
但是,这些创建每个引用实体一个额外的查询。我该如何解决这个问题?
我的第一个想法是延长的createQuery方法:
public function createQuery($context = 'list')
{
/** @var \Doctrine\ORM\QueryBuilder|QueryBuilder $query */
$query = parent::createQuery($context);
$query
->addSelect($query->getRootAliases()[0])
->addSelect('collectionOrder')
;
$query
->leftJoin($query->getRootAliases()[0] . '.order', 'collectionOrder')
;
return $query;
}
但是,这将不起作用。
那么我怎样才能设法得到所有需要的数据与一个查询,以减少数据库加载时间?