doctrineum / date-interval
将 DateInterval 添加到 Doctrine DBAL 和 ORM
3.1.0
2018-07-18 07:57 UTC
Requires
- php: >=7.1
- ext-bcmath: *
- doctrine/dbal: ~2,>=2.2.3
- doctrineum/self-registering-type: ^2.1
- granam/date-interval: ^3.0
Requires (Dev)
- ext-pdo_sqlite: *
- doctrine/orm: ~2,>=2.2.3
- mockery/mockery: ~1.0
- phpunit/phpunit: ~7.0
- roave/security-advisories: dev-master
README
将 DateInterval
添加到 Doctrine ORM(可以作为 @Column(type="date-interval")
使用)和 DBAL(可以在 DQL 查询中使用作为 DATE_INTERVAL
)。
用法
<?php namespace ChopChop; use Doctrine\ORM\Mapping as ORM; use \Granam\DateInterval\DateInterval as GranamDateInterval; /** * @ORM\Entity() */ class Job { /** * @var int * @ORM\Id() @ORM\GeneratedValue(strategy="AUTO") @ORM\Column(type="integer") */ private $id; /** * @var GranamDateInterval * @ORM\Column(type="date_interval") */ private $interval; /** * @return GranamDateInterval */ public function getInterval(): GranamDateInterval { return $this->interval; } /** * @param GranamDateInterval $interval */ public function setInterval(GranamDateInterval $interval) { $this->interval = $interval; } } $annualJob = new Job(); $annualJob->setInterval(new GranamDateInterval('P1Y')); $monthlyJob = new Job(); $monthlyJob->setInterval(new GranamDateInterval('P1M')); $dailyJob = new Job(); $dailyJob->setInterval(new GranamDateInterval('P1D')); /** @var \Doctrine\ORM\EntityManager $entityManager */ $entityManager->persist($annualJob); $entityManager->persist($monthlyJob); $entityManager->persist($dailyJob); $entityManager->flush(); $entityManager->clear(); /** @var Job[] $jobs */ $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" // note: to spec conversion is feature of HerreraDateInterval
安装
将其添加到您的 Composer 依赖项列表中(或者手动编辑您的 composer.json 文件中的 require
部分)
composer require jaroslavtyc/doctrineum-date-interval
注册新的 DBAL 类型
<?php use Doctrineum\DateInterval\DBAL\Types\DateIntervalType; DateIntervalType::registerSelf();
注册新的 Doctrine ORM 函数
<?php use Doctrineum\DateInterval\ORM\Query\AST\Functions\DateIntervalFunction; // ... $entityManager = ... /** @var \Doctrine\ORM\EntityManager $entityManager */ DateIntervalFunction::addSelfToDQL($entityManager);
当使用 Symfony 与 Doctrine 时,您可以通过配置执行与上述相同的操作
# app/config/config.yml # Doctrine Configuration doctrine: dbal: # ... mapping_types: date_interval: date_interval types: date_interval: Doctrineum\DateInterval\DBAL\Types\DateIntervalType orm: # ... dql: datetime_functions: DATE_INTERVAL: Doctrineum\DateInterval\ORM\Query\AST\Functions\DateIntervalFunction