$qb = $this->createQueryBuilder('u')
->select('u.id, u.name, c.category')
->innerJoin('u.categories', 'c')
->where('u.id = (:user)')
->setParameter('user', $user)
->getQuery()
->execute();
我总是得到这个结果:
Array[0] = 'id' -> 1, 'name' -> john, 'category' -> A
Array[1] = 'id' -> 1, 'name' -> john, 'category' -> B
Array[2] = 'id' -> 1, 'name' -> john, 'category' -> C
我希望得到这个:
Array[0] = 'id' -> 1, 'name' -> john, 'category' -> [A,B,C]
如果我使用Group By u.id我会获得第一个类别的第一个数组[0]而我丢失了其他两个类别。
我该如何进行此查询?
谢谢!
答案 0 :(得分:3)
SQL查询
SELECT
id
, name
, GROUP_CONCAT(category) AS categories
FROM
[table]
GROUP BY
id
, name
学说代码
教义代码应该是这样的。
$qb = $this->createQueryBuilder('u')
->select('u.id, u.name', DB::raw('GROUP_CONCAT(category) AS categories'))
->innerJoin('u.categories', 'c')
->where('u.id = (:user)')
->groupBy('u.id', 'u.name')
->setParameter('user', $user)
->getQuery()
->execute();
答案 1 :(得分:-1)
请参阅MySql手册中的group_concat。
$sql = "SELECT u.id, u.name, GROUP_CONCAT(c.category SEPARATOR ',')
FROM table_name u
INNER JOIN categories table c ON (your conditions)
WHERE u.id = ($user)
GROUP BY c.category";
$em = $this->getDoctrine()->getEntityManager();
$em->createQuery($sql);
$em->execute();