1

製品エンティティがあり、アプリケーションなどの複数の属性を持つことができます。「アプリケーション」にも複数の値がある場合があります。

製品には「アプリケーション」の値の配列がありますが、後で findBy('applications' => 'whatever') などを実行できるように、Doctrine でそれを保存するにはどうすればよいですか?

Product 1
   application1
   application3

Product 2
   application1
   application2

したがって、後で findBy('applications' => 'application1') を実行すると、両方の製品が検出されるはずです。

4

2 に答える 2

3

次のように、エンティティ間に 1 対多の関係を構成したとします。

製品エンティティ:

/**
* @ORM\OneToMany(targetEntity="Aplication", mappedBy="product", cascade={"persist"})
*/
protected $aplications;

アプリケーション エンティティ:

* @ORM\ManyToOne(targetEntity="Product", inversedBy="aplications")
* @ORM\JoinColumns({
*   @ORM\JoinColumn(name="product_id", referencedColumnName="id")
* })
    protected $product;

製品リポジトリで次のような DQL を作成できます。

$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p')
   ->from('bundleNamespace:Product', 'p')
   ->leftJoin('p.applications', 'a')
   ->andWhere($qb->expr()->in('a.id', ':aplication'))
                    ->setParameter('aplication', $aplication);

return $qb->getQuery()->getResult();
于 2013-04-13T11:50:14.587 に答える