我对Doctrine / Symfony很新,我拉我的头发因为我无法做到这一点。
我有一个外键相关的两个表。
Product: id, name, stock
Order: id, date, productId, quantity, sent
我可以使用$produt->getOrders()
获取一个产品的所有订单,但我希望仅那些待发送的产品。
我该怎么做?。
感谢。
答案 0 :(得分:0)
如果您想要许多产品的所有订单,您可以使用QueryBuilder
:
$this->createQueryBuilder('order')
->join('order.productId', 'order')
->where('order.sent = :sentStatus')->setParameter('sentStatus', true)
->getQuery()
->getResult();
如果您已有产品对象/实体,并且想要为每个产品选择订单:
$this->createQueryBuilder('order')
->join('order.productId', 'order')
->where('order.sent = :sentStatus')->setParameter('sentStatus', true)
->where('product = :productEntity')->setParameter('productEntity', $productEntity)
->getQuery()
->getResult();
如果您不想使用QueryBuilder
您可以循环或过滤订单集合:details
答案 1 :(得分:0)
您可以通过两种方式完成此操作:
首先使用像这样的QueryBuilder(我建议):
class SomeServiceOrController() {
function getOrdersPending($productId) {
return $this->getEntityManager()->createQueryBuilder()
->select('order')
->from('\AppBundle\Order', 'order') // or whatever your namespace your Entity is
->join('order.productId', 'product')
->where('order.productId =: productParam')
->andWhere('order.sent = :sentParam')
->setParameter('productParam', $productId)
->setParameter('sentParam', 'pending')
->getQuery()
->getResult;
}
}
参见参考here。
其次是DQL(Doctrine查询语言)。有关用法,请参阅this参考。它与使用你的php命名空间的SQL非常相似。