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

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

Параметр columnDefinition атрибута Column позволяет указать произвольное SQL-определение для столбца таблицы. Он используется в тех случаях, когда стандартных параметров Doctrine недостаточно: например, для специфичных типов данных конкретной СУБД, необычных ограничений или значений по умолчанию, зависящих от диалекта базы данных. Значение параметра представляет собой строку с фрагментом SQL-кода, который будет подставлен в определение столбца при создании таблицы.

Синтаксис

#[Column(type: 'string', columnDefinition: 'VARCHAR(255) NOT NULL DEFAULT \'abcde\'')]

Пример

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

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'articles')] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private ?int $id = null; #[ORM\Column( type: 'string', length: 255, columnDefinition: 'VARCHAR(255) NOT NULL DEFAULT \'hello\'' )] private string $title = 'hello'; 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; } } ?>

Теперь при генерации схемы Doctrine создаст столбец title с указанным SQL-определением, включая значение по умолчанию 'hello'.

Пример

Давайте используем columnDefinition для столбца с типом datetime и автоматической установкой текущего времени при вставке:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'articles')] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private ?int $id = null; #[ORM\Column( type: 'datetime', columnDefinition: 'DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP' )] private \DateTimeInterface $createdAt; public function __construct() { $this->createdAt = new \DateTime(); } public function getId(): ?int { return $this->id; } public function getCreatedAt(): \DateTimeInterface { return $this->createdAt; } } ?>

При создании таблицы столбец created_at получит значение по умолчанию на уровне базы данных - текущую дату и время.

Пример

Давайте применим columnDefinition для хранения JSON-данных в PostgreSQL с использованием типа jsonb:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'articles')] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private ?int $id = null; #[ORM\Column( type: 'json', columnDefinition: 'JSONB NOT NULL DEFAULT \'{}\'' )] private array $meta = []; public function getId(): ?int { return $this->id; } public function getMeta(): array { return $this->meta; } public function setMeta(array $meta): self { $this->meta = $meta; return $this; } } ?>

Такой подход позволяет задействовать нативный тип jsonb PostgreSQL, который не поддерживается стандартными средствами Doctrine DBAL.

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

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