herrera-io / doctrine-dateinterval
此包已被弃用且不再维护。未建议替代包。
支持Doctrine DBAL和ORM中的DateInterval。
1.0.0
2013-02-19 23:59 UTC
Requires
- php: >=5.3.3
- doctrine/dbal: >=2.2.3,<2.4-dev
- herrera-io/date-interval: >=1.1,<2.0-dev
Requires (Dev)
- doctrine/orm: >=2.2.3,<2.4-dev
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2021-12-07 01:34:01 UTC
README
支持Doctrine DBAL和ORM中的DateInterval。
摘要
DateInterval
库
- 为DBAL添加
dateinterval
类型 - 为ORM添加
DATE_INTERVAL
DQL函数
这得益于DateInterval
库。
安装
将其添加到Composer依赖列表中
$ composer require herrera-io/doctrine-dateinterval=1.*
在Doctrine DBAL中注册它
<?php use Doctrine\DBAL\Types\Type; use Herrera\Doctrine\DBAL\Types\DateIntervalType; Type::addType( DateIntervalType::DATEINTERVAL, 'Herrera\\Doctrine\\DBAL\\Types\\DateIntervalType' );
在Doctrine ORM中注册它
<?php $entityManager->getConfiguration()->addCustomDatetimeFunction( 'DATE_INTERVAL', 'Herrera\\Doctrine\\ORM\\Query\\AST\\Functions\\DateIntervalFunction' ); $entityManager->getConnection() ->getDatabasePlatform() ->registerDoctrineTypeMapping( DateIntervalType::DATEINTERVAL, DateIntervalType::DATEINTERVAL );
当使用带有Doctrine的Symfony2时,您可以通过更改配置来完成与上面相同的操作
# app/config/config.yml # Doctrine Configuration doctrine: dbal: # ... mapping_types: dateinterval: dateinterval types: dateinterval: Herrera\Doctrine\DBAL\Types\DateIntervalType orm: # ... dql: datetime_functions: DATE_INTERVAL: Herrera\Doctrine\ORM\Query\AST\Functions\DateIntervalFunction
使用
<?php /** * @Entity() * @Table(name="Jobs") */ class Job { /** * @Column(type="integer") * @GeneratedValue(strategy="AUTO") * @Id() */ private $id; /** * @Column(type="dateinterval") */ private $interval; /** * @return DateInterval */ public function getInterval() { return $this->interval; } /** * @param DateInterval $interval */ public function setInterval(DateInterval $interval) { $this->interval = $interval; } } $annualJob = new Job(); $annualJob->setInterval(new DateInterval('P1Y')); $monthlyJob = new Job(); $monthlyJob->setInterval(new DateInterval('P1M')); $dailyJob = new Job(); $dailyJob->setInterval(new DateInterval('P1D')); $entityManager->persist($annualJob); $entityManager->persist($monthlyJob); $entityManager->persist($dailyJob); $entityManager->flush(); $entityManager->clear(); $jobs = $entityManager->createQuery( "SELECT j FROM Jobs j WHERE j.interval < DATE_INTERVAL('P1Y') ORDER BY j.interval ASC" )->getResult(); echo $jobs[0]->getInterval()->toSpec(); // "P1D" echo $jobs[1]->getInterval()->toSpec(); // "P1M"
注意 返回的日期间隔实例为
Herrera\DateInterval\DateInterval
。