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;
}
但是,這將不起作用。
那麼我怎樣才能設法得到所有需要的數據與一個查詢,以減少數據庫加載時間?