Атрибут 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.