带有连接表的实体的学说查询生成器
问题描述:
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();
答
你们的关系好像你有很多-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
答
$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();