php - 如何在 symfony 存储库中使用 group by

标签 php symfony group-by

我在DayRepository.php中有这段代码:

public function findAllFromThisUser($user)
    {
        $query = $this->getEntityManager()
            ->createQuery(
                'SELECT d FROM AppBundle:Day d
                WHERE d.user = :user
                ORDER BY d.dayOfWeek ASC'
            )->setParameter('user', $user);
        try{
            return $query->getResult();
        } catch (\Doctrine\ORM\NoResultException $e){
            return null;
        }

    }

在 Controller DayController.php中,我有以下代码:

/**
 * @Route("/days/list", name="days_list_all")
 */
public function listAllAction()
{
    $user = $this->container->get('security.token_storage')->getToken()->getUser();

    $days = $this->getDoctrine()
        ->getRepository('AppBundle:Day')
        ->findAllFromThisUser($user);

    //$user = $job->getUser();

    return $this->render('day/listAll.html.twig', ['days' => $days]);
}

day/listAll.html.twig{{ dump(days) }} 的输出为:

array:3 [▼
  0 => Day {#699 ▼
    -id: 11
    -dayOfWeek: "0"
    -lessonTime: DateTime {#716 ▶}
    -user: User {#486 ▶}
    -job: Job {#640 ▶}
    -client: Client {#659 ▶}
  }
  1 => Day {#657 ▼
    -id: 13
    -dayOfWeek: "0"
    -lessonTime: DateTime {#658 ▶}
    -user: User {#486 ▶}
    -job: Job {#640 ▶ …2}
    -client: Client {#659 ▶ …2}
  }
  2 => Day {#655 ▼
    -id: 12
    -dayOfWeek: "4"
    -lessonTime: DateTime {#656 ▶}
    -user: User {#486 ▶}
    -job: Job {#640 ▶ …2}
    -client: Client {#659 ▶ …2}
  }
]

我真正需要的是对结果进行分组,以便将 dayOfWeek0 的所有结果分组在一起?我需要根据 dayOfWeek 属性对结果进行分组。我尝试在查询中使用 GROUP BY d.dayOfWeek 但收到此错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'taskMaestro.d0_.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

感谢您的宝贵时间。

最佳答案

我会尽力提供解决方案和解释,希望对您有所帮助。

假设您有这样的表结构: enter image description here

并且您希望获取按 dayOfWeek 分组的所有记录以及将在这一天进行讲座的讲师列表(分别用逗号分隔)。

你可能会想出这样的东西:

SELECT `dayOfWeek`, GROUP_CONCAT(`lector`) AS `dayLectors` FROM `day` GROUP BY `dayOfWeek`

结果将是:
enter image description here

另外,如果你想获取已获取记录的 id 列表,你可以这样写:

SELECT `dayOfWeek`, GROUP_CONCAT(`lector`) AS `dayLectors`, GROUP_CONCAT(`id`) AS `dayIds` FROM `day` GROUP BY `dayOfWeek`

所以结果将是:
enter image description here


并且,如果我正确理解您的问题,这个答案可能会对您有所帮助。

关于php - 如何在 symfony 存储库中使用 group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45135953/

相关文章:

java - 如何为字符串创建正则表达式以匹配 [@username :4]?

php - PHP 8.1 上的 Laravel 9 响应缓慢 - 开箱即用

php - 为什么对 Symfony Controller 的 jQuery AJAX 请求是并行处理的而不是异步的?

mysql - 从不同的相关记录组中选择两列之一中包含重复值的所有行

PHP 重定向页面仅适用于本地主机

php - mysql和重复条目报告

php - 安装chamilo期间发生 fatal error

php - 确定 twig 模板中的当前页面,并为相应的链接设置一个 css 类

MYSQL求和所有用户对单个用户购买商品的总票数

mysql - 使用 GROUP BY 检索满足条件的记录