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/