franzose/doctrine-chronos

Chronos 的 Doctrine DBAL 类型

v2.0 2023-12-11 06:24 UTC

This package is auto-updated.

Last update: 2024-09-11 08:02:12 UTC


README

Chronos 是一个增强的不可变日期/时间对象实现。此存储库提供了四种自定义 Doctrine DBAL 日期/时间类型:chronoschronostzchronos_datechronos_time。在您的实体中,如果您想用 Cake\Chronos\ChronosCake\Chronos\ChronosDateCake\Chronos\ChronosTime 实例分别替换标准 DateTimeImmutable 对象,可以使用这些类型。

注册与使用

使用以下行注册类型

<?php
// in the bootstrapping code

use Doctrine\DBAL\Types\Type;
use Franzose\DoctrineChronos\ChronosDateType;
use Franzose\DoctrineChronos\ChronosTimeType;
use Franzose\DoctrineChronos\ChronosType;
use Franzose\DoctrineChronos\ChronosTzType;

Type::addType('chronos_date', ChronosDateType::class);
Type::addType('chronos_time', ChronosTimeType::class);
Type::addType('chronos', ChronosType::class);
Type::addType('chronostz', ChronosTzType::class);

或者在使用 Symfony 的情况下

doctrine:
    dbal:
        types:
            chronos_date: Franzose\DoctrineChronos\ChronosDateType
            chronos_time: Franzose\DoctrineChronos\ChronosTimeType
            chronos: Franzose\DoctrineChronos\ChronosType
            chronostz: Franzose\DoctrineChronos\ChronosTzType

现在您可以在 Doctrine 实体中使用这些类型了

<?php
declare(strict_types=1);

use Cake\Chronos\Chronos;
use Cake\Chronos\ChronosDate;
use Cake\Chronos\ChronosTime;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Table;

#[Entity, Table(name: '"user"')]
class User
{
    #[Column(name: 'registered_at', type: 'chronostz', nullable: false)]
    private Chronos $registeredAt;

    #[Column(name: 'confirmed_at', type: 'chronostz')]
    private ?Chronos $confirmedAt = null;

    #[Column(name: 'deactivated_at', type: 'chronostz')]
    private ?Chronos $deactivatedAt = null;
    
    #[Column(name: 'birth_date', type: 'chronos_date')]
    private ?ChronosDate $birthDate = null;
    
    #[Column(name: 'usual_wake_up', type: 'chronos_time')]
    private ?ChronosTime $usualWakeUp = null;
}