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

しかし、商品と 1 つの価格エントリしか返されません。Symfony デバッグ コンソールを見て、実行されたクエリを取得し、データベースに対して実行すると、2 つの異なるロケールに対して 2 つの価格が返されます。

私は今、これを修正することに本当に行き詰まっています。私が間違っていることについて何か手がかりを得た人はいますか?

4

2 に答える 2

1

結局のところ、これの修正は非常に簡単でした。国ごとに異なる価格をサポートしているため、商品価格とは別に商品を保管するデータベースがあります。商品価格エンティティでは、商品コードがそのエンティティの ID として設定されました。そのため、エンティティは、データベースに同じ「ID」を持つ行が 2 つあるため、そのうちの 1 つだけを返すと不平を言っていました。

于 2012-11-19T10:26:28.357 に答える
0

そして、fetch="EAGER"オプションを削除すると。それは同じ問題ですか?

于 2012-11-16T15:44:00.653 に答える