Параметр unique атрибута Column
Параметр unique атрибута Column указывает,
что значения в столбце таблицы должны быть уникальными.
Если параметр установлен в true,
Doctrine создаёт уникальный индекс для этого поля,
и попытка вставить дубликат приводит к ошибке базы данных.
Параметр необязательный, по умолчанию равен false.
Синтаксис
#[Column(unique: true)]
Пример
Давайте создадим сущность User с уникальным полем email:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
#[ORMTable(name: 'users')]
class User
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn(type: 'integer')]
private ?int $id = null;
#[ORMColumn(type: 'string', length: 255, unique: true)]
private string $email;
#[ORMColumn(type: 'string', length: 255)]
private string $name;
public function getEmail(): string
{
return $this->email;
}
public function setEmail(string $email): self
{
$this->email = $email;
return $this;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
}
?>
Пример
Давайте попробуем сохранить двух пользователей с одинаковым email:
<?php
namespace AppController;
use AppEntityUser;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user/create', name: 'user_create')]
public function create(EntityManagerInterface $em): Response
{
$user1 = new User();
$user1->setEmail('user@example.com');
$user1->setName('user 1');
$user2 = new User();
$user2->setEmail('user@example.com');
$user2->setName('user 2');
$em->persist($user1);
$em->persist($user2);
$em->flush();
return new Response('users created');
}
}
?>
Результат выполнения кода:
An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'user@example.com' for key 'UNIQ_1483A5E9E7927C74'
Пример
Давайте сохраним двух пользователей с разными email:
<?php
namespace AppController;
use AppEntityUser;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class UserController extends AbstractController
{
#[Route('/user/create', name: 'user_create')]
public function create(EntityManagerInterface $em): Response
{
$user1 = new User();
$user1->setEmail('user1@example.com');
$user1->setName('user 1');
$user2 = new User();
$user2->setEmail('user2@example.com');
$user2->setName('user 2');
$em->persist($user1);
$em->persist($user2);
$em->flush();
return new Response('users created');
}
}
?>
Результат выполнения кода:
"users created"