我正在 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 ( )
我认为我至少应该取回数组中的采购订单信息,即使没有行项目、行项目位置、状态或入库记录。
这是我的测试 Twig 模板,错误不在这里,只是想我还是添加它......
{% 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 %}
{{ purchaseorderitems.id }}<br>
{% for purchaseorderitemLocations in purchaseorderitems.purchaseOrderLineItemLocation %}
{{ purchaseorderitemLocations.id }}<br>
{% for purchaseOrderProductsStatus in purchaseorderitemLocations.purchaseOrderProductsStatus %}
{{ purchaseOrderProductsStatus.id }}<br>
{% endfor %}
{% endfor %}
{% endfor %}
</div>
</div>
</div>
</div>
{% endfor %}
现在,我已经添加了新的采购订单,因此该记录确实存在于采购订单表中。
感谢您的帮助!
最佳答案
它应该使用 LEFT JOIN 来代替。只是想通了,我想如果其他人需要的话,我会把答案留在那里。干杯!
关于php - Symfony2 Doctrine 自定义查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21785108/