簡體   English   中英

如何在ID匹配/聯接中查詢多對多表

[英]how to query many to many table in doctrine matching/joining on id

我有兩個實體:文章和類別。 那有很多表:article_category。

我可以在MySQL中毫無問題地執行此查詢:

SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC

但是我很難將其轉換為Doctrine2查詢。 下面返回一個不存在的類錯誤,參考article_category表。

[...]
createQuery("SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC")
[...]

具體來說,我的問題是我不知道如何訪問“多對多”表中的“ category_id”。

編輯

這是使用內部聯接的相同查詢(如果可以簡化的話)。

SELECT COUNT(*) cnt, c.id, c.name FROM category c INNER JOIN article_category ac ON c.id = ac.category_id GROUP BY c.id ORDER BY cnt DESC

我能夠弄清楚。 我使用DQL創建查詢:

    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->select('COUNT(c) cnt, c.id, c.name')
    ->from('NatknowEditorBundle:Category', 'c')
    ->innerJoin('c.articles', 'ac')
    ->groupBy('c.id')
    ->orderBy('cnt', 'DESC');

    return $qb->getQuery()->getResult();

我以為我必須指定需要在哪里進行JOIN(“ ... ON c.id = ac.category_id ...”)。 但是,由於多對多已經由數組集合(在我的情況下為“文章”)映射,我在“類別”實體中擁有,所以我猜“ ON”是隱式的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM