具有连接表的实体的查询查询生成器 [英] Doctrine Query Builder for entities with Join Table

查看:50
本文介绍了具有连接表的实体的查询查询生成器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆