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

Атрибут Column

Атрибут Column вешается на свойство сущности и определяет, как это свойство будет храниться в базе данных. Первым параметром передаётся тип колонки (например, 'string', 'integer', 'text'). Дополнительные параметры позволяют задать длину, уникальность, nullable и другие характеристики. Без этого атрибута Doctrine не сможет корректно создать структуру таблицы.

Синтаксис

#[Column(type: 'string', length: 255, nullable: false, unique: false, options: [])]

Пример

Давайте создадим сущность Article со свойством title, для которого укажем тип 'string' и длину 150:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 150)] private string $title; 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; } } ?>

После выполнения команды php bin/console doctrine:schema:update --force в таблице появится колонка title типа VARCHAR(150).

Пример

Давайте сделаем свойство description необязательным для заполнения (nullable) и разрешим хранить в нём длинный текст:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'text', nullable: true)] private ?string $description = null; public function getId(): ?int { return $this->id; } public function getDescription(): ?string { return $this->description; } public function setDescription(?string $description): self { $this->description = $description; return $this; } } ?>

Теперь при создании записи без указания description поле останется пустым, ошибки не возникнет.

Пример

Давайте добавим свойство email и сделаем его уникальным, чтобы в базе не могло быть двух одинаковых адресов:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class User { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255, unique: true)] private string $email; public function getId(): ?int { return $this->id; } public function getEmail(): string { return $this->email; } public function setEmail(string $email): self { $this->email = $email; return $this; } } ?>

При попытке сохранить пользователя с уже существующим адресом Doctrine выбросит исключение UniqueConstraintViolationException.

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

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