合并连接结果在一个数组中

时间:2017-08-07 11:45:03

标签: php mysql database symfony doctrine-orm

$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]而我丢失了其他两个类别。

我该如何进行此查询?

谢谢!

2 个答案:

答案 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();