在Doctrine中的多个值内搜索

时间:2013-04-11 10:31:52

标签: php symfony doctrine-orm

我有一个产品实体,它可以有多个属性,如应用程序。 “应用程序”也可能具有多个值。

因此该产品有一系列“应用程序”的值,如何使用Doctrine保存它,以便我可以在以后执行findBy('applications'=>'what')或类似的?

Product 1
   application1
   application3

Product 2
   application1
   application2

所以后来的findBy('applications'=>'application1')应该找到这两种产品。

2 个答案:

答案 0 :(得分:3)

假设您已在实体之间配置了一对多关系,如下所示:

产品实体:

/**
* @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();

答案 1 :(得分:0)

试试这个:

public function findProductByApplication($app) {
    $query = $this->em->createQuery('SELECT DISTINCT p FROM Product p JOIN p.applications app WHERE app = :app');
    $query->setParameter('app', $app);
    return $query->getResult();
}