2016-07-20 20 views
1

Ich habe die folgende Objektstruktur: Order->RepairJobs->Parts. Part hat eine boolesche Eigenschaft InStock. Was wäre der effizienteste Weg, um herauszufinden, ob eine bestimmte Order enthält RepairJobs mit Parts, die nicht auf Lager sind? Sollte ich iterieren durch alle RepairJob und dann durch alle Part, oder hat Symfony/Doctrine einige intelligente Funktion dafür?Symfony Iterate durch Objekte

Antwort

0

In Ihrem Controller Add Query Builder:

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

Pass zu machen Vorlage Zweig wie so:

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

dann in Twig iterieren:

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

In der oben Zweig, "part" ist ein Part-Objekt und "getRepairJob" ist eine Part-Methode, die die Repair-Entity erhält. Dies ruft ein RepairJob-Objekt ab, dann ist 'getOrder' die RepairJob-Methode, die ein Order-Objekt erhält. Ich nehme an, dass Sie Ihre Entitäten und die richtigen ORM-Annotationen eingerichtet haben, um jede Entität zuzuordnen. Wo sowohl "RepairJobs" als auch "Parts" eine Sammlung von Objekten sind.

Hoffentlich macht das Sinn. Aber so wird es gemacht, und es macht die Programmierung extrem einfach.