0

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

在 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();
    }
}

这是非常非常精简的,只包括有问题的项目。$prices 应该是与我们涵盖的所有区域(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 个价格,就像我应该做的那样。

我现在真的坚持要解决这个问题。有人知道我做错了什么吗?

4

2 回答 2

1

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

于 2012-11-19T10:26:28.357 回答
0

当您删除该fetch="EAGER"选项时。是同一个问题吗?

于 2012-11-16T15:44:00.653 回答