2015-05-27 24 views
0

我想这个SQL查询转换为教义的实体管理器:转换SQL教义

SELECT count(c.id) 
     FROM content c 
     WHERE c.id IN 
      (SELECT tdtc.content_id 
      FROM tdtheme_content tdtc 
      JOIN tdtheme tdt ON tdtc.tdtheme_id = tdt.id 
      JOIN td t ON tdt.td_id = t.id 
      JOIN matiere m ON t.matiere_id = m.id 
      WHERE m.id = 2) 

     OR c.id IN 
      (SELECT sc.content_id 
      FROM semaine_content sc 
      JOIN semaine s ON sc.semaine_id = s.id 
      JOIN cour cr ON s.cour_id = cr.id 
      JOIN matiere m ON cr.matiere_id = m.id 
      WHERE m.id = 2) 

     OR c.id IN 
      (SELECT ac.content_id 
      FROM annale_content ac 
      JOIN annale a ON ac.annale_id = a.id 
      JOIN matiere m ON a.matiere_id = m.id 
      WHERE m.id = 2)'); 

我:

Matiere随着Annale而TD和赛道

Annale随着内容

Td随着Tdtheme随着内容

Cours With Semaines Wi th内容

而我想要得到一个matiere的内容计数

任何想法?

谢谢,对不起我的英语不好^^

+0

欢迎来到Stack Overflow!这个问题在信息上有点短暂。你可以分享你的尝试,以及你遇到了什么问题? –

回答

0

假设你的实体名称ContentTdTheme_Content

$repo = $em->getRepository('AppBundle:Content'); 
$query = $repo ->createQueryBuilder('c'); 

$subQuery1 = $query->createSubquery(); 
$subQuery1 
    ->select('tdtc.contentId') 
    ->from('TdTheme_Content tdtc') 
    ->join('tdtc.tdTheme tdt') // Doctrine joins by property names, not column names 
    ->join('tdt.td t') 
    ->join('t.matiere m') 
    ->where('m.id = ?', 2) 
; 

// Assume similar for $subQuery2 and $subQuery3 

$query 
    ->select('COUNT(c.id)') 
    ->where('c.id IN(' . $subQuery1->getDql() ')') 
    ->orWhere('c.id IN(' . $subQuery2->getDql() ')') 
    ->orWhere('c.id IN(' . $subQuery3->getDql() ')') 
; 

注:我没有调试这或试图执行它 - 这是刚刚从我的头顶上学习了一些基本知识的教条查询生成器api。