Вышла новая версия Doctrine ORM 2.11

Вышла очередная минорная версия 2.11 Doctrine ORM. Это первая версия, которая поддерживает перечисления PHP 8.1. Полный список изменения можно посмотреть тут.

Вышла новая версия Doctrine ORM 2.11

Поддержка перечислений PHP 8.1

В следующем примере приведен пример использования переслений для описания свойств сущностей БД.

enum Suit: string {
    case Hearts = 'H';
    case Diamonds = 'D';
    case Clubs = 'C';
    case Spades = 'S';
}

#[Entity]
class Card
{
    /** ... */

    #[Column(type: 'string', enumType: Suit::class)]
    public $suit;
}

Виртуальные и сгенерированные столбцы

Появилась возможность указывать опции (insertable, updatable, generated) для свойств сущностей. Пример 1:

#[Entity]
class User
{
     #[ManyToOne(targetEntity: Country:class), JoinColumn(name: "country_code", referencedColumnName: "country_code")]
     public $country;

     #[Column(type: "string", name: "country_code", insertable: false, updatable: false)]
     public $countryCode;
}

Пример 2:

#[Entity]
class Article
{
    #[Column(type: "datetime",
        columnDefinition: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",
        insertable: false,
        updatable: false,
        generated: "ALWAYS")]
    public $created;
}

Свойства только для чтения

Теперь свойствам сущностей можно указать ключевое слово readonly, которое запрещает его обновление.

#[Entity, Table(name: 'author')]
class Author
{
    #[Column, Id, GeneratedValue]
    private readonly int $id;

    #[Column]
    private readonly string $name;
}

Арифметические выражения в операторе IN

Теперь внутри оператора IN можно использовать арифметические выражения или функции.

SELECT u FROM User u WHERE u.id IN (1 + 1, FOO(u.id))

Ссылка на источник: https://www.doctrine-project.org/2022/01/11/orm-2.11.html

Дата публикации: 2022-01-11

Просмотры: 179
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль