次のデータベースがあります。
==================
製品
製品番号
名前
価格
==================
オーダーアイテム
orderItem_id
製品
注文
額
料金
==================
注文
order_id
お店
==================
お店
store_id
国
名前
==================
国
country_id
名前
Countryには多くのStoresがあり、Storeには多くのOrdersがあり、Orderには多くのOrderItemsがあり、OrderItemは約 1 つのProductです。
このクエリでは、 OrderItemsを持つすべてのProductsを取得します。
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
正常に動作しますが、私が欲しいのは、 Countryが指定されたOrderItemsを持つすべてのProductsです。私はこれを試してみましたが、うまくいきません.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
1 つのStoreのすべての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の関係エンティティにアクセスできるようですが、「結合された」エンティティにはアクセスできないようです。
解決策はありますか?
私は Symfony2 で Doctrine2 を使用しています:
$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;
}