РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
156 of 258 menu

Поле enum

Поле enum типа EnumType в Doctrine хранит значение из PHP-перечисления (enum) в базе данных. Первым параметром в атрибут Column передаётся тип поля, вторым - опции, среди которых обязательна опция enumType, указывающая класс перечисления. При чтении из базы Doctrine автоматически преобразует строку или число в объект перечисления.

Синтаксис

#[Column(type: 'enum', enumType: EnumClass::class, options: [])]

Пример

Давайте создадим перечисление статусов статьи:

<?php namespace AppEnum; enum ArticleStatus: string { case Draft = 'draft'; case Published = 'published'; case Archived = 'archived'; } ?>

Теперь опишем сущность с полем этого перечисления:

<?php namespace AppEntity; use AppEnumArticleStatus; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private int $id; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMColumn(type: 'enum', enumType: ArticleStatus::class)] private ArticleStatus $status; public function getStatus(): ArticleStatus { return $this->status; } public function setStatus(ArticleStatus $status): void { $this->status = $status; } } ?>

Создадим статью со статусом Published:

<?php use AppEntityArticle; use AppEnumArticleStatus; $article = new Article(); $article->setStatus(ArticleStatus::Published); echo $article->getStatus()->value; ?>

Результат выполнения кода:

"published"

Пример

Перечисление может быть целочисленным. Давайте создадим enum для приоритета задачи:

<?php namespace AppEnum; enum TaskPriority: int { case Low = 1; case Medium = 2; case High = 3; } ?>

Опишем сущность с этим полем:

<?php namespace AppEntity; use AppEnumTaskPriority; use DoctrineORMMapping as ORM; #[ORMEntity] class Task { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private int $id; #[ORMColumn(type: 'string', length: 255)] private string $name; #[ORMColumn(type: 'enum', enumType: TaskPriority::class)] private TaskPriority $priority; public function getPriority(): TaskPriority { return $this->priority; } public function setPriority(TaskPriority $priority): void { $this->priority = $priority; } } ?>

Создадим задачу с высоким приоритетом:

<?php use AppEntityTask; use AppEnumTaskPriority; $task = new Task(); $task->setPriority(TaskPriority::High); echo $task->getPriority()->value; ?>

Результат выполнения кода:

3

Пример

Опция nullable позволяет хранить в поле значение null:

<?php namespace AppEntity; use AppEnumArticleStatus; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private int $id; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMColumn(type: 'enum', enumType: ArticleStatus::class, nullable: true)] private ?ArticleStatus $status = null; public function getStatus(): ?ArticleStatus { return $this->status; } public function setStatus(?ArticleStatus $status): void { $this->status = $status; } } ?>

Создадим статью без статуса:

<?php use AppEntityArticle; $article = new Article(); $article->setTitle('abcde'); var_dump($article->getStatus()); ?>

Результат выполнения кода:

NULL

Смотрите также

  • параметр enumType,
    который задаёт класс перечисления для поля
  • параметр nullable,
    который разрешает хранить значение null
  • поле string,
    которое хранит строковое значение
  • поле integer,
    которое хранит целочисленное значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить