繁体   English   中英

Symfony2学说,在条件下显示数据库中的实体

[英]Symfony2 Doctrine, displaying entities from db under conditions

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

表1(主):

id | pkgno | barcode | weight

表2(子):

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。 我想满足以下条件:当前数量将空数据(空)设为0。因此,如果Sub没有Shipment条目,则inqty将减去0。

从学说文档复制

$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

我通过将null值设置为0通过coalesce()函数找到了解决方案。

SELECT
  s.id as subid, s.rackno, s.boxno, s.batchno, s.inqty,
  m.pkgno, m.barcode, m.weight,
  ss.outqty
FROM
  Bundle:Main m
LEFT JOIN
  m.sub s
LEFT JOIN
  s.ship ss
WHERE
  m.pkgno = :pkgno
AND
  (s.inqty - coalesce(ss.outqty, 0)) > 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM