Php 使用条令筛选相关表上的行
我对Doctrine/Symfony很陌生,我很紧张,因为我不知道怎么做 我有两个由一个外键关联的表Php 使用条令筛选相关表上的行,php,doctrine,symfony,Php,Doctrine,Symfony,我对Doctrine/Symfony很陌生,我很紧张,因为我不知道怎么做 我有两个由一个外键关联的表 Product: id, name, stock Order: id, date, productId, quantity, sent 我可以通过$produt->getOrders()获得一个产品的所有订单,但我只希望获得待发送的订单 我该怎么做 谢谢。如果您需要许多产品的所有订单,您可以使用QueryBuilder: $this->createQueryBuilder('order'
Product: id, name, stock
Order: id, date, productId, quantity, sent
我可以通过$produt->getOrders()
获得一个产品的所有订单,但我只希望获得待发送的订单
我该怎么做
谢谢。如果您需要许多产品的所有订单,您可以使用
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
,可以循环或筛选订单集合:
阅读并了解它您可以通过两种方法来实现这一点: 首先是像这样使用QueryBuilder(我推荐): 请参阅参考资料
其次是DQL(条令查询语言)。有关用法,请参阅参考资料。它与SQL非常相似,可以利用php名称空间。最好知道您的Symfony/Doctrine实体是什么样子的。由于ORM框架原则,您不必关心数据库的表示,而需要关心实体的表示。使用Doctrine,您可以使用名称空间和实体属性创建查询。
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;
}
}