我有以下数据库:
===================
产品
product_id
姓名
价格
===================
订单项
orderItem_id
产品
命令
数量
成本
===================
命令
order_id
店铺
===================
店铺
store_id
国家
姓名
===================
国家
country_id
姓名
一个国家有很多商店,一个商店有很多订单,一个订单有很多订单项目,一个订单项目是关于一个产品的。
通过这个查询,我检索了所有带有OrderItems的产品:
SELECT p.name, sum(o.amount) as total
FROM SupplierBundle:Product p
LEFT JOIN SupplierBundle:OrderItem o
WHERE p.id = o.product
GROUP BY p.id
并且工作正常,但我想要的是所有带有OrderItems的Products给定Country。我尝试这样做但不起作用,返回 0 行:
SELECT p.name,
sum(oi.amount) as total,
FROM SupplierBundle:OrderItem oi
JOIN SupplierBundle:Product p
WITH oi.product = p.id
JOIN SupplierBundle:Order o
WITH oi.order = o.id
JOIN SupplierBundle:Store s
WITH o.store = s.id
WHERE s.id = :countryId
我还尝试了一个商店的所有OrderItems ,但没有任何改变:
SELECT p.name,
sum(oi.amount) as total,
FROM SupplierBundle:OrderItem oi
JOIN SupplierBundle:Product p
WITH oi.product = p.id
JOIN SupplierBundle:Order o
WITH oi.order = o.id
JOIN SupplierBundle:Store s
WITH o.store = 1
问题似乎我可以访问OrderItem的关系实体,但不能访问“加入”实体。
有什么解决办法吗?
我将 Doctrine2 与 Symfony2 一起使用:
$dqlQuery = 'SELECT ...';
$query = $em->createQuery($dqlQuery);
$query->setParameter('countryId', 1);
$products = $query->getResult();
编辑:
添加了 OrderItem 实体:
/**
*
* @ORM\Table(name="OrderItem")
*/
class OrderItem
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(name="product")
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumn(name="product", referencedColumnName="id")
*/
private $product;
/**
* @ORM\Column(name="orderItems")
* @ORM\ManyToOne(targetEntity="Order")
* @ORM\JoinColumn(name="order", referencedColumnName="id")
*/
private $order;
/**
* @var integer
*
* @ORM\Column(name="cost", type="integer")
*/
private $cost;
/**
* @var integer
*
* @ORM\Column(name="amount", type="integer")
*/
private $amount;
}