0

次のデータベースがあります。

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

製品

製品番号

名前

価格

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

オーダーアイテム

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

0 に答える 0