Comment puis-je utiliser SQL de l'ANNÉE(), MOIS() et le JOUR() dans Doctrine2?
Je veux exécuter une requête qui devrait ressembler à cela en SQL natif:
SELECT
AVG(t.column) AS average_value
FROM
table t
WHERE
YEAR(t.timestamp) = 2013 AND
MONTH(t.timestamp) = 09 AND
DAY(t.timestamp) = 16 AND
t.somethingelse LIKE 'somethingelse'
GROUP BY
t.somethingelse;
Si je suis en train de mettre en œuvre cette Doctrine du générateur de requête comme ceci:
$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
->from('MyBundle:MyEntity', 'e')
->where('YEAR(e.timestamp) = 2013')
->andWhere('MONTH(e.timestamp) = 09')
->andWhere('DAY(e.timestamp) = 16')
->andWhere('u.somethingelse LIKE somethingelse')
->groupBy('somethingelse');
Je reçois le message d'erreur exception
[Erreur de syntaxe] la ligne 0, col 63: Erreur: Attendu fonction connue, a obtenu "ANNÉE"
Comment puis-je mettre en œuvre ma requête avec des Doctrines générateur de requêtes?
Notes:
- Je sais à propos de La Doctrine du SQL Natif. J'ai essayé cela, mais il conduit au problème que mon productif et mon développement tables de base de données ont des noms différents. Je veux travailler de base de données agnostique, donc ce n'est pas une option.
- Bien que je veux travailler db agnostique: pour info, je suis de l'utilisation de MySQL.
- Il y a moyen d'étendre la Doctrine "d'apprendre" le
YEAR()
etc. états, par exemple, comme vu ici. Mais je suis à la recherche d'un moyen pour éviter l'ajout de plugins tiers.
- Je suis de l'utilisation de MySQL.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez ajouter La Doctrine de l'extension de sorte que vous pouvez utiliser le MySql
YEAR
etMONTH
déclaration par l'ajout de cette configuration si vous êtes sur Symfony:maintenant, vous pouvez utiliser le MOIS et l'ANNÉE des instructions dans votre DQL ou querybuilder.
orocrm/doctrine-extensions semble être un bon projet trop
Il prend en charge les MySQL et PostgreSql .. le but est d'être de la croix-DB
Dans Symfony 4 vous devez installer DoctrineExtensions si vous utilisez:
De commande à installer: