Doctrine2在标准中加入

时间:2012-11-08 16:03:12

标签: symfony doctrine-orm

我正在使用带有Doctrine2的SF2.1

我有一个这样的模型:

  

第1条。* ArticleCategory * .1类别

在我的类别实体中,我希望获得与$ this相关的所有文章,orderBy article.created以及article.published为true,

我能做到:

$articles = array();
foreach($this->getArticleCategory() as $art_cat){
    $article = $art_cat->getArticle();
    if($article->isPublished()) $articles[] = $article;
}

但它不会处理订单,反正看起来太重了......

来自Doctrine Collection的标准更合适但我不知道如何处理关系表,

我不想在存储库中执行此操作,因为它涉及特定的类别

对我有任何暗示吗?

1 个答案:

答案 0 :(得分:0)

如果文章有:

/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="articles")
*/
private $categories;

和类别有:

/**
* @ORM\ManyToMany(targetEntity="Article", mappedBy="categories")
*/
private $articles;

(假设有一个article_category连接表,根据Doctrine标准)

然后:

$articles = $em->getRepository('AcmeBundle:Article')
        ->createQueryBuilder('a')
        ->join('a.categories', 'c')
        ->andWhere('c.id=:category_id')
        ->setParameter('category_id', $categoryId)
        ->andWhere('a.published=TRUE')
        ->orderBy('a.created')
        ->getQuery()->getResult();

将带来由categoryId标识的类别的已发布文章,按创建日期排序。