具有OneToMany关系的Symfony2中的Doctrine实体返回1个条目,尽管DB中有2个

时间:2012-11-16 15:28:10

标签: symfony doctrine-orm

事先感谢任何知道答案的人,因为这个问题让我想要伤害小猫。

在Symfony2中,我有一个如下设置的Doctrine实体。

namespace Product\ProductCoreBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Persistence\PersistentObject;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="item")
 * @ORM\Entity(repositoryClass="Product\ProductCoreBundle\Repositories\ProductRepository")
 */
class Product extends PersistentObject
{
    /**
     * 
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="Product\ProductCoreBundle\Entity\ItemPrice", mappedBy="product", fetch="EAGER")
     */
    protected $prices;

    public function __construct() {
        $this->prices = new ArrayCollection();
    }
}

这非常非常简单,只包括违规项目。 $ price应该是我们所涵盖的所有区域设置(GBP,EUR等等)中与此项目相关的所有价格的数组,并且ItemPrice实体的设置如下:

namespace Product\ProductCoreBundle\Entity;

use Doctrine\Common\Persistence\PersistentObject;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="itemprice")
 * @ORM\Entity(repositoryClass="Product\ProductCoreBundle\Repositories\ItemPriceRepository")
 */
class ItemPrice extends PersistentObject
{
    /**
     * The Product that this price is for.
     * @var Product
     * @ORM\ManyToOne(targetEntity="Product", inversedBy="prices")
     * @ORM\JoinColumn(name="item_code", referencedColumnName="item_code")
     */
    protected $product;
}
然后我做了一个:

$pr = $this->getDoctrine()->getRepository('MPProductProductCoreBundle:Product');
$product = $pr->findByPublicId({some_id});

但我只收回产品和一个价格条目。当我查看Symfony调试控制台并获取已执行的查询并对数据库执行它时,我得到了两个不同语言环境的2个价格,就像我应该做的那样。

我现在真的很难解决这个问题。任何人都有关于我做错了什么的线索?

2 个答案:

答案 0 :(得分:1)

事实证明,对此的修复非常简单。我们有一个数据库,其中物品与物品价格分开存储,因为我们支持不同国家的不同价格。在商品价格实体中,商品代码被设置为该实体的ID。因此,该实体抱怨数据库中有2行具有相同的“ID”,因此只返回其中一行。

答案 1 :(得分:0)

当您删除fetch="EAGER"选项时。这是同样的问题吗?