Bu aslında çok yaygın bir sorudur. O değil tüm sql veritabanları bir TARİH fonksiyonunu desteklemesi çıkıyor, bu nedenle Doktrin sorumlu iyi insanlar nativelly bunu desteklemeye karar verdi. insanların bir demet çaba adil bir miktar kaydedilmiş olurdu çünkü dileğin
Tür yaptılar.
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);
}
}
Sonra uygulamanızı/config.yml doktrini bölümünde bu kadar Tel:
Yani projenize bu oldukça büyülü sınıf eklemek
daha sql fonksiyonları ile orada diğer grup yok. Garibi, birkaç yıl önce ilk kez baktığımda, hiçbirinin Tarih tanımlaması yoktu. Bu yüzden kendiminkini yaptım.
================================= ======================
Güncelleme 01
dikkatle etiketleri kontrol ve bu Symfony'nin 2 uygulama olduğunu farz vermedi. Tarih sınıfı aynı kalır. Doktrin konfigürasyon nesnesini alarak bağlarsınız.
$config = new \Doctrine\ORM\Configuration();
$config->addCustomDatetimeFunction('DATE', 'blahblah\Date');
Ayrıntılar için Doktrin bağlantısını kontrol edin. Andy için
olası yinelenen [Doktrini 2 - Bir datetime alanın tarih bölümü tarafından Filtre sonuçlarına] (http://stackoverflow.com/questions/10824383/doctrine-2 -filter-sonuç-bir-datetime-alanları-tarih-bölüm) – andy
@andy değil bir yinelenen. ** queryBuilder ** kullanıyorum ve 'createQuery 've' queryBuilder 'kullanarak hata mesajı aynıdır: Hata: Bilinen fonksiyon beklenen,' DATE 'aldı. – DanFromGermany
erro aynıdır, çünkü DQL'de DATE() 'yoktur. Bağlantılı yinelemeden WHERE yan tümcesini kullanırsanız, yaklaşımınız da işe yaramalıdır. – andy