Php 多重加入主义

Php 多重加入主义,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有以下数据库: ================== 产品 产品标识 名字 价格 ================== 订单项 orderItem\u id 产品 订单 数量 成本 ================== 秩序 订单号 商店 ================== 商店 商店标识 国家 名字 ================== 国家 国家识别号 名字 一个国家有许多商店,一个商店有许多订单,一个订单有许多订单项,而一个订单项大约是一个产品 通过此查询,我检索带有订单项的所有产品

我有以下数据库:

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

产品 产品标识

名字

价格

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

订单项 orderItem\u id

产品

订单

数量

成本

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

秩序 订单号

商店

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

商店 商店标识

国家

名字

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

国家 国家识别号

名字


一个国家有许多商店,一个商店有许多订单,一个订单有许多订单项,而一个订单项大约是一个产品

通过此查询,我检索带有订单项的所有产品:

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
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
工作正常,但我想要的是所有产品以及订单项给定的国家。我尝试使用此选项,但不起作用,返回0行

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
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
我还尝试了一个商店的所有订单项,但没有任何变化:

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

您可以复制您的orderItem实体吗?我想这段关系是个错误。一个愚蠢的问题。。。您是否已将
*@ORM\Entity
放在
*@ORM\Table(name=“OrderItem”)
下?“产品”和“OrderItem”之间的关系不应该是一对一的?是的,我只删除无用的代码。我想我有办法了。使用Product and Order work,因为_toString()方法返回他的id。在store and country中,我返回了名称。所以我改变了它并开始工作,但我不知道是否需要这个_toString()返回实体的名称:(