我有一个表结构 -
name grade
a 10
b 8
c 9
我正在编写一个查询,用于选择等级大于7的行,并希望以此格式生成结果
{
a: {grade: 10},
b: {grade: 8},
c: {grade: 9}
}
这是我的查询
createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->getQuery()
->getResult();
有人可以帮忙吗?
答案 0 :(得分:2)
'from'函数有一个名为indexBy的第三个参数。 Tha就是你要找的。您的查询应该是这样的。
....->createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x', 'x.name')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->getQuery()
->getResult();
结果将是这样的
{
a: {name: a, grade: 10},
b: {name: b, grade: 8},
c: {name: c, grade: 9}
}
请勿从查询中删除该名称。如果您不选择它,它将无法工作。 希望这会有所帮助。
快乐编码,
Alexandru Cosoi
答案 1 :(得分:1)
尝试:
createQueryBuilder()
->select('x.name, x.grade as grade')
->from('gradesTable', 'x')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->indexBy('x', 'x.name')
->getQuery()
->getResult();
或者:
createQueryBuilder('gradesTable', 'x', 'x.name')
->select('x.name, x.grade as grade')
->where('x.grade > :threshold')
->setParameter('threshold', 7)
->getQuery()
->getResult();
(或接受回答:))
使用createQuery()
功能时,您还可以使用:
createQuery('SELECT x.name, x.grade as grade FROM gradesTable x INDEX BY x.name');
答案 2 :(得分:0)
您可以使用MySQL的concat函数生成所需的输出,例如:
select concat (name, ": {grade:", grade, "}")
from test
where grade > 8;