0

我有以下数据库:

===================

产品

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;
}
4

0 回答 0