mysql - Symfony 连接同一个表以从表中获取值作为别名

标签 mysql symfony doctrine-orm

id  name   referred_by_id
1   test1  2
2   test2  1
3   test3  1

我想添加一个新列,用于根据referedByID 查询输出referedByName。等于 id。

SELECT t1.*, t2.name AS refname 
FROM tbl_students t1 
JOIN tbl_students t2 
   ON t1.referred_by_id = t2.id
ORDER BY t1.id

我想在 Symsofny 中为我的查询执行此 JOIN(同一个表)

   $repo = $this->getDoctrine()->getRepository('C2EducateToolsBundle:Students');
            $leadsData['leads'] = $repo->createQueryBuilder('t')
                            ->select('t.id', 't.name','t.referredByID','t.referredBy')
                            ->where('t.id = :stuID')
                            ->setParameter('stuID', $leadId)
                            ->getQuery()->getResult();

我必须更改实体中的任何关联吗?

我改变了我的实体

 /**
             * @var integer $referredByID
             *
             * @ORM\Column(name="referred_by_id", type="integer", nullable=true)
             * @Type("integer")
             */
            protected $referredByID;

/**
     * @var referredByID
     *
     * @ORM\ManyToOne(targetEntity="Students", cascade={"persist", "remove", "merge"})
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="referred_by_id", referencedColumnName="id")
     * })
     * @Type("C2Educate\ToolsBundle\Entity\Students")
     */
    protected $referredByID;

最佳答案

如果您的主要实体中有关联映射,那么您不需要在查询构建器中提及,因为当您获取学说对象时,它将拥有其关联对象的数据,就像在查询中将选择方法更新为->选择('t')

如果您的查询根据提供的学生 ID 返回学生对象,那么在学生对象上,您可以调用其关联对象的 getter 方法,如下所示

$student->getReferredByID()->getName()

以上语句将返回标记为该对象所引用的关联学生的姓名。

此外,如果您要通过主键进行搜索,则可以仅使用存储库上的 find() 方法,而不是使用查询生成器。

尽管您也可以在查询生成器中指定别名

关于mysql - Symfony 连接同一个表以从表中获取值作为别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46195120/

相关文章:

php - 如何在mysql中获取值之前打印总和

symfony - Twig表单主题-form_label类属性

doctrine-orm - Cloud Spanner 和学说 2.x

php - 用PHP和mySql连接J2ME

mysql - 使用 hibernate 进行查询

MySQL 程序表中的问题

安卓 : authentication to php server application

php - swiftmailer Swift_TransportException 未被 try-catch block 捕获

php - 在 Doctrine 2.x ORM 中使用 REGEXP

php - Symfony 3 - Doctrine\Common\Annotations\AnnotationRegistry::registerLoader() 必须是 Doctrine\Common\Annotations\void 的实例,没有返回