2016-07-20 7 views
1

私は以下のオブジェクト構造を持っています:Order->RepairJobs->PartsPartにはブール値のプロパティInStockがあります。 OrderRepairJobsPartsが含まれているかどうかを調べる最も効率的な方法は何ですか?私はすべてRepairJobを繰り返し、それからすべてPartを渡すべきですか、またはSymfony/Doctrineはこれに対していくつかのスマートな機能を持っていますか?お使いのコントローラの追加クエリビルダでsymfonyオブジェクトを反復する

答えて

0

$em = $this->getDoctrine()->getManager(); 
$qb = $em->createQueryBuilder(); 
$qb->select('p') 
    ->from('AppBundle:Part', 'p') 
    ->where('p.InStock = false'); 
$parts = $qb->getQuery()->getResult(); 

パスがそうのような小枝テンプレートをレンダリングする:

return $this->render('show/orders_without_stock.html.twig', array(
    'parts' => $parts, 
)); 

が続いて小枝に反復:小枝上記で

<h2>Orders With Parts Not in Stock</h2> 

<table> 
    <tr> 
     <th>Order</th> 
    </tr> 

{% for part in parts %} 
    <tr> 
     <td>{{ part.getRepairJob.getOrder }}</td> 
    </tr> 
{% endfor %} 

</table> 

、 'part'はPartオブジェクトであり、 'getRepairJob'は修復エンティティを取得するPartメソッドです。これは、RepairJobオブジェクトを取得し、 'getOrder'はOrderオブジェクトを取得するRepairJobメソッドです。 私はあなたのエンティティとそれぞれのエンティティをマッピングする正しいORMアノテーションをセットアップしたとします。 「RepairJobs」と「Parts」の両方がオブジェクトの集合です。

これはうまくいけばうまくいきます。しかし、これがどのように行われているのか、そしてコード化するのが非常に簡単になります。

関連する問題