2014-02-14 94 views
0

我在使用原则在Symfony2中创建自定义查询。任何人,我遇到的问题是这个脚本不会返回任何结果,除非在所有表中都有记录。如何确保即使所有连接的表都没有记录,我也可以取回记录。Symfony2原则自定义查询问题

这里是我的代码:

$em = $this->getDoctrine()->getManager(); 
    $dql = " SELECT p, poli, polil, pops, pa 
       FROM WIC\PurchaseOrderBundle\Entity\PurchaseOrder p 

       JOIN p.purchaseOrderLineItem poli 
        WITH poli.purchaseOrder=p.id 

       JOIN poli.purchaseOrderLineItemLocation polil 
        WITH polil.purchaseOrderLineItem=poli.id 

       JOIN polil.purchaseOrderProductsStatus pops 
        WITH pops.purchaseOrderLineItemLocation=polil.id 

       JOIN pops.putAway pa 
        WITH pa.purchaseOrderProductsStatus=pops.id 

       WHERE p.account=:account_id 
       AND p.id=:id"; 
    $query = $em->createQuery($dql); 
    $query->setParameters(array(
     'account_id' => $account->getId(), 
     'id' => 10488, 
    )); 
    $purchaseorders = $query->getArrayResult(); 

计数数组:

When I do a echo count(purchaseorders) it returns: 0 

打印阵列:

When I do a print_r($purchaseorders) it returns: Array () 

我倒觉得我至少应该回去购买即使没有订单项,订单项的位置,状态或收起记录,也可以在数组中排序信息。

这里是我的测试枝杈模板,错误并不在于此,只是觉得我反正它添加...

{% for purchaseorder in purchaseorders %} 
<div class="row-fluid"> 
    <div class="span12"> 
     Purchase Order: {{ purchaseorder.id }} 
     <div class="row-fluid"> 
      <div class="span12"> 
       {% for purchaseorderitems in purchaseorder.purchaseOrderLineItem %} 
        &nbsp;&nbsp;&nbsp;&nbsp; {{ purchaseorderitems.id }}<br> 
        {% for purchaseorderitemLocations in purchaseorderitems.purchaseOrderLineItemLocation %} 
         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ purchaseorderitemLocations.id }}<br> 
         {% for purchaseOrderProductsStatus in purchaseorderitemLocations.purchaseOrderProductsStatus %} 
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {{ purchaseOrderProductsStatus.id }}<br> 
         {% endfor %} 
        {% endfor %} 
       {% endfor %} 
      </div> 
     </div> 
    </div> 
</div> 
{% endfor %} 

因为它是现在,我已经添加了新的采购订单,所以该记录确实存在于PurchaseOrder表中。

感谢您的帮助!

+0

在循环中循环循环 – Prisoner

回答

0

它应该使用LEFT JOIN来代替。只是想通了,我以为只要他们需要,我就会把答案留在那里。干杯!