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

Параметр enumType атрибута Column

Параметр enumType атрибута Column указывает, с каким PHP-перечислением (enum) связано поле сущности. Он используется вместе с типом Types::STRING (или другим подходящим типом) и позволяет Doctrine автоматически преобразовывать значение колонки в экземпляр enum и обратно при чтении и записи.

Параметр принимает имя класса перечисления, реализующего интерфейс BackedEnum (например, string или int). Без этого параметра Doctrine не сможет сопоставить значение из базы с нужным enum.

Синтаксис

#[Column(type: Types::STRING, enumType: SomeEnum::class)]

Пример

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

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

Теперь опишем сущность с полем статуса:

<?php namespace AppEntity; use AppEnumArticleStatus; use AppRepositoryArticleRepository; use DoctrineDBALTypesTypes; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: Types::INTEGER)] private ?int $id = null; #[ORMColumn(type: Types::STRING, length: 255)] private ?string $title = null; #[ORMColumn(type: Types::STRING, length: 20, enumType: ArticleStatus::class)] private ?ArticleStatus $status = null; public function getId(): ?int { return $this->id; } public function getTitle(): ?string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getStatus(): ?ArticleStatus { return $this->status; } public function setStatus(ArticleStatus $status): self { $this->status = $status; return $this; } } ?>

Пример

Давайте запишем статью со статусом и выведем значение поля:

<?php namespace AppController; use AppEntityArticle; use AppEnumArticleStatus; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $article->setStatus(ArticleStatus::Published); $em->persist($article); $em->flush(); return new Response($article->getStatus()->value); } } ?>

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

"published"

Пример

Давайте найдём статью и получим экземпляр enum из поля status:

<?php namespace AppController; use AppEntityArticle; use AppEnumArticleStatus; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function show(EntityManagerInterface $em): Response { $article = $em->getRepository(Article::class)->find(1); return new Response($article->getStatus()->name); } } ?>

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

"Published"

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

  • поле enum,
    которое хранит значение перечисления
  • атрибут Column,
    который описывает колонку таблицы
  • параметр type,
    который задаёт тип колонки
  • параметр length,
    который задаёт длину строкового поля
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить