2015-02-12 59 views
0
User ---[OneToMany]---> AcquiredSkill ---[ManyToOne]---> Skill 

我在創建使用查詢生成器的原則中存在問題。有人可以幫助我將這個MySQL查詢轉換爲使用查詢生成器的原則查詢嗎?帶有連接表的實體的學說查詢生成器

SELECT u.*, s.* 
FROM `user` u 
Join `acquired_skill` ac ON ac.user_id = u.user_id 
Join `skill` s ON ac.skill_id = s.skill_id 

user 
- user_id 
- name 
skill 
- skill_id 
- skill_name 
acquired_skill 
- as_id 
- skill_id 
- user_id 

到目前爲止,這是我的查詢,但它缺乏技能之間的連接。

createQueryBuilder('u') 
     ->select('u.user_id', 'u.name') 
     ->getQuery() 
     ->getResult(); 

回答

0

你們的關係好像你有很多-to-many關聯用戶和技能之間,你可以設置你的實體設置像用戶實體這種關係將指向技能實體在一個多到多路

用戶實體

/** 
* @ORM\ManyToMany(targetEntity="Namespace\YourBundle\Entity\Skill", cascade={"persist"}) 
* @ORM\JoinTable(name="acquired_skill", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="skill_id", referencedColumnName="id")} 
*) 
*/ 
private $skills; 

技能實體

/** 
* 
* @ORM\ManyToMany(targetEntity="Namespace\YourBundle\Entity\User", mappedBy="skills") 
*/ 
private $user; 

現在查詢生成器,你可以用技巧加入您的用戶實體像下面

$this->createQueryBuilder('u') 
     ->select('u') 
     ->innerJoin('u.skills','s') 
     ->getQuery() 
     ->getResult(); 

進一步澄清看到文檔22.2.19. @ManyToMany

0
 $qb = $this->entity_manager->createQueryBuilder('u'); 
     $qb->select("*"); 
     $qb->innerJoin('Namespace\YourBundle\Entity\Aq_skill', 'ac', 'WITH', 'ac.user_id = u.user_id'); 
     $qb->innerJoin('Namespace\YourBundle\Entity\skill', 's', 'WITH', 'ac.skill_id = s.skill_id'); 

     $result = $qb->getQuery()->getArrayResult();