tubssp / doctrine-dateinterval
1.1.1
2016-02-04 08:28 UTC
Requires
- php: >=5.3.3|7
- doctrine/dbal: ~2,>=2.2.3
- tubssp/date-interval: ~1.3.1
Requires (Dev)
- doctrine/orm: ~2,>=2.2.3
- phpunit/phpunit: 3.7.*|~4|~5
This package is not auto-updated.
Last update: 2016-02-04 08:35:48 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 时,您可以通过仅更改配置来实现与上面相同的功能
# 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
。