Параметр length атрибута Column
Параметр length атрибута Column
задаёт максимальную длину строкового поля
в базе данных. Он применяется только
к строковым типам, например string
или ascii_string. Значение параметра
передаётся целым числом и определяет,
сколько символов может хранить колонка.
Синтаксис
#[Column(length: 255)]
Пример
Давайте создадим сущность Article
со строковым полем title длиной
100 символов:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
#[ORMTable(name: 'articles')]
class Article
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn]
private ?int $id = null;
#[ORMColumn(length: 100)]
private ?string $title = null;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): static
{
$this->title = $title;
return $this;
}
}
?>
В результате в базе данных будет создана
колонка title типа VARCHAR(100).
Пример
Давайте проверим, что произойдёт при попытке сохранить строку длиннее заданного лимита:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_create')]
public function create(EntityManagerInterface $em): Response
{
$article = new Article();
$article->setTitle(str_repeat('abcde', 30));
$em->persist($article);
$em->flush();
return new Response('saved');
}
}
?>
Результат выполнения кода:
"An exception occurred while executing a query: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column 'title' at row 1"
Пример
Давайте создадим поле code
с длиной 10 и запишем в него
строку 'abcde', которая помещается
в лимит:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
#[ORMTable(name: 'articles')]
class Article
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn]
private ?int $id = null;
#[ORMColumn(length: 10)]
private ?string $code = null;
public function getId(): ?int
{
return $this->id;
}
public function getCode(): ?string
{
return $this->code;
}
public function setCode(string $code): static
{
$this->code = $code;
return $this;
}
}
?>
Теперь сохраним значение и выведем его:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/code', name: 'article_code')]
public function code(EntityManagerInterface $em): Response
{
$article = new Article();
$article->setCode('abcde');
$em->persist($article);
$em->flush();
return new Response($article->getCode());
}
}
?>
Результат выполнения кода:
abcde