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_INTERVALDQL 函数
这是通过 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。