首页 > 解决方案 > 执行从 SQL 转换的 Doctrine DQL 查询时出错

问题描述

我在使用 Doctrine Query Language (DQL) 重写与 MySql 一起正常工作的 SQL 查询时遇到问题。我有两个具有以下结构的表:

--
-- Structure de la table `ame`
--

CREATE TABLE `ame` (
  `id` int NOT NULL,
  `profile_id` int DEFAULT NULL,
  `date_ajout` date NOT NULL,
  `type_ame_id` int NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

表 2:

--
-- Structure de la table `type_ame`
--

CREATE TABLE `type_ame` (
  `id` int NOT NULL,
  `nom` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我的问题是我设法编写了我的 sql 请求,该请求对我进行计数并返回type_ame按日期对它们进行分组的列表。这是有效的 sql 请求,但我无法用 DQL 编写它

SELECT a.date_ajout, COUNT(a.type_ame_id), ta.nom
FROM ame a
LEFT JOIN type_ame ta on a.type_ame_id = ta.id
WHERE a.profile_id = 2
GROUP BY a.date_ajout, a.type_ame_id
ORDER BY date_ajout ASC

Next SQL 代码返回以下结果

这是我的存储库功能,但是

public function  findStatistique($user)
{
    $entityManager = $this->getEntityManager();

      $query = $entityManager->createQuery(
        'SELECT a.dateAjout, COUNT(a.typeAme), ta.nom
            FROM App\Entity\Ame a
            LEFT JOIN App\Entity\TypeAme ta
            WHERE a.profile = 2
            GROUP BY a.dateAjout, a.typeAme
            ORDER BY a.dateAjout ASC'
    );
    return $query->getResult();

erreur-symfony-5-sql-dql

但我无法将其转换为 doctine DQL 语言

标签: sqldoctrine-ormdqlsymfony5doctrine-query

解决方案


我找到了解决方案:

public function  findStatistique($id)
{
    $entityManager = $this->getEntityManager();

    $query = $entityManager->createQueryBuilder('a');
                $query->select('a.dateAjout', 'count(a.typeAme)', 'ta.nom');
                $query->from('App:Ame', 'a');
                $query->leftJoin('a.typeAme', 'ta');
                $query->groupBy('a.dateAjout', 'a.typeAme', 'a.profile');
                $query->having('a.profile = :id');
                $query->orderBy('a.dateAjout', 'ASC');
                $query->setParameter('id', $id);

    return $query->getQuery()->getResult();

}

推荐阅读