具有连接表的实体的查询查询生成器 [英] Doctrine Query Builder for entities with Join Table
问题描述
User ---[OneToMany]---> AcquiredSkill ---[ManyToOne]---> Skill
我在使用学说中的查询生成器创建查询时遇到问题.有人可以帮助我使用查询生成器将此mysql查询转换为学说查询吗?
I'm having problems with creating a query using query builder in doctrine. Can someone help me convert this mysql query to a doctrine query using query builder?
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
到目前为止,这是我的查询,但是缺少技能之间的联系.
So far, this is my query but it lacks the join between the skills.
createQueryBuilder('u')
->select('u.user_id', 'u.name')
->getQuery()
->getResult();
推荐答案
您的关系似乎在用户和技能之间具有多对多关联,您可以设置实体来设置此关系,就像用户实体将指向技能实体一样多对多方式
Your relation seems like you have many-to-many association between user and skills you can set your entities to setup this relation like user entity will point to skill entity in a many-to-many way
用户实体
/**
* @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;
现在,在查询生成器中,您可以使用以下技能加入用户实体
Now in query builder you can join your user entity with skill like below
$this->createQueryBuilder('u')
->select('u')
->innerJoin('u.skills','s')
->getQuery()
->getResult();
有关进一步的说明,请参见docs 22.2.19@ManyToMany
for further clarification see docs 22.2.19. @ManyToMany
这篇关于具有连接表的实体的查询查询生成器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!