【问题标题】:Doctrine Query Builder for entities with Join Table具有连接表的实体的 Doctrine 查询构建器
【发布时间】:2015-04-12 16:39:52
【问题描述】:
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();

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

    您的关系似乎在用户和技能之间存在多对多关联,您可以设置实体来设置这种关系,就像用户实体将以多对多的方式指向技能实体

    用户实体

    /**
     * @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

    【讨论】:

    • 对于案例mappedBy="scheduleType"(骆驼案例)- >join('sch.scheduleType', 'scht')
    【解决方案2】:
            $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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多