Das ist eigentlich eine sehr häufige Frage. Es stellt sich heraus, dass nicht alle SQL-Datenbanken eine DATE-Funktion unterstützen, so dass die guten Leute, die für Doctrine zuständig sind, entschieden haben, sie nicht nativ zu unterstützen.
Eine Art von Wunsch, den sie getan haben, weil es eine Menge Leute eine ziemlich Menge Mühe gespart hätte.
So fügen Sie diese eher magische Klasse zum Projekt hinzu:
doctrine:
orm:
default_entity_manager: default
auto_generate_proxy_classes: %kernel.debug%
entity_managers:
default:
connection: default
...
dql:
datetime_functions:
date: Cerad\Bundle\CoreBundle\Doctrine\DQL\Date
http://doctrine-orm.readthedocs.org/en/latest/cookbook/dql-user-defined-functions.html http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html http://symfony.com/doc/current/reference/configuration/doctrine.html
:
namespace Cerad\Bundle\CoreBundle\Doctrine\DQL;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
class Date extends FunctionNode
{
public $date;
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return "DATE(" . $sqlWalker->walkArithmeticPrimary($this->date) . ")";
}
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->date = $parser->ArithmeticPrimary();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
es dann in der Lehre Abschnitt Ihrer app/config.yml verdrahten
Es gibt andere Bündel mit mehr SQL-Funktionen. Seltsamerweise, als ich das erste Mal vor ein paar Jahren aussah, hatte keiner von ihnen Date definiert. Also habe ich einfach mein eigenes gemacht.
============================================== ======================
aktualisieren 01
ich nicht überprüfen Sie die Tags sorgfältig und angenommen, dass dies ein Symfony 2-Anwendung war. Die Date-Klasse bleibt gleich. Sie verbinden es, indem Sie das Doktrin-Konfigurationsobjekt erhalten.
$config = new \Doctrine\ORM\Configuration();
$config->addCustomDatetimeFunction('DATE', 'blahblah\Date');
Weitere Informationen finden Sie im Doctrine-Link.
möglich Duplikat [Lehre 2 - Ergebnis durch ein Datum Teil des Datetime-Feldes] (http://stackoverflow.com/questions/10824383/doctrine-2 -filter-result-by-a-datetime-felder-date-part) – andy
@andy kein Duplikat. Ich benutze den ** queryBuilder ** und die Fehlermeldung mit 'createQuery' und der' queryBuilder' ist gleich: 'Error: Erwartete bekannte Funktion, habe 'DATE' bekommen. – DanFromGermany
Der Fehler ist derselbe, weil in DQL kein 'DATE()' vorhanden ist. Wenn Sie die WHERE-Klausel aus dem verknüpften Duplikat verwenden, sollte Ihr Ansatz ebenfalls funktionieren. – andy