sql - 执行从 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();
但我无法将其转换为 doctine DQL 语言
解决方案
我找到了解决方案:
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();
}
推荐阅读
- javascript - 无法将日期范围插入多个选择选项标签
- java - Java 流可选,对两个项目进行空检查
- python - HoloViews 超出了 IOPub 消息速率
- maven - 如何激活 Maven 配置文件使用环境变量?
- windows - 如何在 Host.UI.PromptForCredential Powershell Windows 10 中输入密码文本字符串
- tabs - 当我尝试将我的自定义应用程序添加到 Micrsoft TEAMS 频道中作为新 TAB 时,保存按钮未显示
- android-studio - 设备(小马 Poco f1)未通过 USB 检测 Android Studio
- r - 从R中的文本文件中提取数字
- java - 如何使用 OpenTok 收听来自我的应用程序的传入视频通话?
- amazon-ec2 - 如何通过 Ansible 在 AWS EC2 实例上部署 Consul