事先感谢任何知道答案的人,因为这个问题让我想要伤害小猫。
在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个价格,就像我应该做的那样。
我现在真的很难解决这个问题。任何人都有关于我做错了什么的线索?
答案 0 :(得分:1)
事实证明,对此的修复非常简单。我们有一个数据库,其中物品与物品价格分开存储,因为我们支持不同国家的不同价格。在商品价格实体中,商品代码被设置为该实体的ID。因此,该实体抱怨数据库中有2行具有相同的“ID”,因此只返回其中一行。
答案 1 :(得分:0)
当您删除fetch="EAGER"
选项时。这是同样的问题吗?