DQL 访问 属性 of 属性 in Query Builder (Doctrine)
DQL Access Property of Property in Query Builder (Doctrine)
我正在整理以下查询。
$lineItems = $em->createQueryBuilder()->select('invitems.unitprice,invitems.quantity,invitems.tax,invitems.scrapetax')
->from('AppBundle:InvoiceLineItems', 'invitems')
->leftJoin('invitems.invoiceId','inv') //StoreID is present in the invoice so only need to leftjoin here
->leftJoin('inv.storeId','si')
->where('inv.companyId = :companyId')
->andWhere('si.id = :storeId')
->andWhere('inv.created BETWEEN :startdate AND :enddate')
->andWhere("inv.status = 'sent' or inv.status = 'paid' or inv.status = 'partial' ")
->setParameter('startdate', $startDate)
->setParameter('enddate', $endDate)
->setParameter('companyId',$companyid)
->setParameter('storeId',$store['id'])
->getQuery()
->getResult();
查询运行时没有崩溃但不起作用,因为我知道我有属于发票商店的数据库条目。当前 returns 0 个条目。我验证了 $store['id'] 给出了正确的 ID,所以这不是一个愚蠢的错误。删除该行及其参数引用 returns 行就好了。
问题出在这一行,->leftJoin('inv.storeId','si')
我可以在来自另一个左联接的 属性 上左联接吗? 我需要这样做的原因是行项目没有参考storeID,只有 invoice 有。
我在文档中找不到任何关于这个主题的内容。
我也尝试过,但没有成功。
->andWhere('inv.storeId = :storeId')
基本上我想做的是:
InvoiceLineItems 引用了 Invoice。发票参考了 商店
我正在尝试访问 invoice 对象(目前有效),然后访问 store 对象发票对象持有。
我找到了问题的答案
$lineItems = $em->createQueryBuilder()->select('invitems.unitprice,invitems.quantity,invitems.tax,invitems.scrapetax')
->from('AppBundle:InvoiceLineItems', 'invitems')
->leftJoin('invitems.invoiceId','inv') //@JA - StoreID is present in the invoice, only need to leftjoin in this case
->where('inv.companyId = :companyId')
->andWhere('inv.storeId = :storeId')
->andWhere('inv.created BETWEEN :startdate AND :enddate')
->andWhere("inv.status = 'sent' or inv.status = 'paid' or inv.status = 'partial' ")
->setParameter('startdate', $startDate)
->setParameter('enddate', $endDate)
->setParameter('companyId',$companyid)
->setParameter('storeId',$store["id"])
->getQuery()
->getResult();
事实证明代码 inv.storeId 确实有效。在我的例子中,这比尝试 leftJoin 更好。虽然我的问题在技术上没有得到解答,但这是解决我的问题的方法。 我仍然很好奇是否可以在您已经离开加入的 属性 上离开加入?
我正在整理以下查询。
$lineItems = $em->createQueryBuilder()->select('invitems.unitprice,invitems.quantity,invitems.tax,invitems.scrapetax')
->from('AppBundle:InvoiceLineItems', 'invitems')
->leftJoin('invitems.invoiceId','inv') //StoreID is present in the invoice so only need to leftjoin here
->leftJoin('inv.storeId','si')
->where('inv.companyId = :companyId')
->andWhere('si.id = :storeId')
->andWhere('inv.created BETWEEN :startdate AND :enddate')
->andWhere("inv.status = 'sent' or inv.status = 'paid' or inv.status = 'partial' ")
->setParameter('startdate', $startDate)
->setParameter('enddate', $endDate)
->setParameter('companyId',$companyid)
->setParameter('storeId',$store['id'])
->getQuery()
->getResult();
查询运行时没有崩溃但不起作用,因为我知道我有属于发票商店的数据库条目。当前 returns 0 个条目。我验证了 $store['id'] 给出了正确的 ID,所以这不是一个愚蠢的错误。删除该行及其参数引用 returns 行就好了。
问题出在这一行,->leftJoin('inv.storeId','si')
我可以在来自另一个左联接的 属性 上左联接吗? 我需要这样做的原因是行项目没有参考storeID,只有 invoice 有。
我在文档中找不到任何关于这个主题的内容。
我也尝试过,但没有成功。
->andWhere('inv.storeId = :storeId')
基本上我想做的是:
InvoiceLineItems 引用了 Invoice。发票参考了 商店
我正在尝试访问 invoice 对象(目前有效),然后访问 store 对象发票对象持有。
我找到了问题的答案
$lineItems = $em->createQueryBuilder()->select('invitems.unitprice,invitems.quantity,invitems.tax,invitems.scrapetax')
->from('AppBundle:InvoiceLineItems', 'invitems')
->leftJoin('invitems.invoiceId','inv') //@JA - StoreID is present in the invoice, only need to leftjoin in this case
->where('inv.companyId = :companyId')
->andWhere('inv.storeId = :storeId')
->andWhere('inv.created BETWEEN :startdate AND :enddate')
->andWhere("inv.status = 'sent' or inv.status = 'paid' or inv.status = 'partial' ")
->setParameter('startdate', $startDate)
->setParameter('enddate', $endDate)
->setParameter('companyId',$companyid)
->setParameter('storeId',$store["id"])
->getQuery()
->getResult();
事实证明代码 inv.storeId 确实有效。在我的例子中,这比尝试 leftJoin 更好。虽然我的问题在技术上没有得到解答,但这是解决我的问题的方法。 我仍然很好奇是否可以在您已经离开加入的 属性 上离开加入?