Symfony2 Doctrine,在条件下显示db中的实体

时间:2014-06-11 19:39:50

标签: php sql symfony doctrine-orm

我有3个表来存储来自仓库的包的信息。

表1(主要):

id | pkgno | barcode | weight

表2(sub):

id | mainid | boxno | rackno | batchno | inqty 

表3(发货):

id | subid | shipdate | blno | outqty

如何查询仅在inqty减去outqty不等于0(因此为1或更多)时的条件下显示的数据行?

这是我开始的查询:

SELECT
   s.id as subid, s.rackno, s.boxno, s.batchno, s.inqty,
   m.pkgno, m.barcode, m.weight
FROM
   Bundle:Main m
LEFT JOIN
   m.sub s
WHERE
   m.pkgno = :pkgno

所以无论数量多少,这都会给我带有包裹编号的所有。如何设置它以便在$ currentqty = $ inqty - $ outqty,if($ currentqty> 0)之类的内容时显示数据?我知道如何在简单的PHP中做到这一点,但不太确定Symfony2。

编辑:更多解释:因此,并非所有Sub表实体都有Shipment条目,即如果该包尚未发货,则它为null。我希望条件是当前数量将空数据(null)取为0.因此,如果Sub没有Shipment条目,那么inqty将减去0.

2 个答案:

答案 0 :(得分:0)

Copied from the doctrine docs

$query = $em->createQuery('SELECT u FROM CmsUser u WHERE ((u.id + 5000) * u.id + 3) < 10000000');

因此,您可以通过在括号中包装每个算术运算来使用列进行算术运算。所以只需加入三个表并减去你的两个值。

WHERE
    table2.outqty IS NOT NULL AND
    (table2.inqty - table3.outqty) > 0

答案 1 :(得分:0)

我通过{null}将函数设置为0来找到解决方案。

coalesce()