1

我将 SF2.1 与 Doctrine2 一起使用

我有一个这样的模型:

文章 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;
}

但它不会处理orderBy,而且它似乎太重了......

Doctrine Collection 中的 Criteria 更合适,但我不知道如何处理关系表,

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

对我有什么提示吗?

4

1 回答 1

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 标识的类别的已发布文章,按创建日期排序。

于 2012-11-08T19:11:22.033 回答