2017-08-31 15 views
1

Symfony2とSonata Admin Bundleを使用していますが、エンティティリストのパフォーマンスに問題が発生しています。データベースSonata Adminエンティティリストのパフォーマンスに関する問題

私は他のエンティティへの関係で、このエンティティを持っている:私のAdminClassオン

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; 

    /* ... */ 
} 

私はコレクションごとにいくつかの注文の詳細やその他の関連エンティティ情報を表示したいと思います。

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
     ->add('id') 
     ->add(
      'order.number', 
      null, 
      array(
       'template' => 'App:Admin:Field/order-data.html.twig', 
       'label' => 'Order Number' 
      ) 
     ); 
} 

しかし、これはそれぞれの参照されたエンティティに追加のクエリを1つずつ作成します。どうすれば解決できますか?

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; 
} 

しかし、これは何の効果も取りません:私の最初のアイデア

はからCreateQueryメソッドを拡張することでした。

データベースの読み込み時間を短縮するために、どのようにして1つのクエリですべての必要なデータを取得できますか?

答えて

0

左結合で結合したテーブルに選択を追加します。

例:

$query 
    ->leftJoin($query->getRootAliases()[0] . '.order', 'collectionOrder') 
    ->addSelect('collectionOrder') 
; 
関連する問題