我有一个产品实体,它可以有多个属性,如应用程序。 “应用程序”也可能具有多个值。
因此该产品有一系列“应用程序”的值,如何使用Doctrine保存它,以便我可以在以后执行findBy('applications'=>'what')或类似的?
Product 1
application1
application3
Product 2
application1
application2
所以后来的findBy('applications'=>'application1')应该找到这两种产品。
答案 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();
}