我有一个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方式不起作用(根据尝试我做了,我似乎无法想到另一种方式。
非常感谢帮助。
答案 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();