在学说2.1中,我如何让所有实体使用多对多关联 - 所有文章都在几个类别中?

时间:2011-12-26 15:39:30

标签: many-to-many associations doctrine-orm

我有一个zend framework 1.11.11应用程序,使用doctrine 2.1(通过bisna) 我有一个文章和类别实体。每篇文章都可以与很多类别相关联,每个类别都可以包含很多文章。

我在每个人中创建了以下关联:
文章:

/**
 * @ManyToMany(targetEntity="Category", inversedBy="categoryArticles")
 * @JoinTable
 * (
 *      name="categories_articles",
 *      joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
 *      inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id")}
 * )
 * @var \Doctrine\Common\Collections\ArrayCollection
 */
protected $categories;

类别:

/**
 * @ManyToMany(targetEntity="Article", mappedBy="categories", cascade={"persist"})
 * @var ArrayCollection
 */
private $categoryArticles;

如何获取属于给定数组类别的所有文章?
例如,我想获得与类别ID 1,5和20相关联的所有文章。

标准存储库方式($ this-> findBy(array('categories'=> array(1,5,20))))不起作用,dql方式不起作用(根据尝试我做了,我似乎无法想到另一种方式。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

一种方法是使用join / in:

<?php
$category_ids = array(1,2,5);
$qb = $em->createQueryBuilder();
$qb->select('a')
    ->from('Article','a')
    ->join('a.categories','c')
    ->where($qb->expr()->in('c.id',$category_ids));
$articles = $qb->getQuery()->execute();