В доктрине 2.1, как мне получить все сущности, использующие многие ко многим ассоциациям - все статьи в нескольких категориях? - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть приложение Zend Framework 1.11.11, использующее доктрину 2.1 (через bisna).
У меня есть объекты Article и Category.Каждая статья может быть связана со многими категориями, каждая категория может содержать много статей.

Я создал следующую ассоциацию в каждой из них:
Статья:

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

Как получить все статьи, принадлежащие данному массиву категорий?
Например, я хочу получить все статьи, связанные с идентификаторами категорий 1, 5и 20.

Стандартный способ хранилища ($ this-> findBy (array ('Categories' => array (1, 5, 20)))) не работает, способ dql не работает (согласно попыткам, которые я сделал), и я не могу думать о другом пути.

Помощь будет высоко ценится.

1 Ответ

1 голос
/ 27 декабря 2011

Один из способов сделать это с помощью 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();
...