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

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

Параметр insertable атрибута Column управляет тем, будет ли колонка участвовать в SQL-запросе вставки новой записи. По умолчанию параметр равен true, и значение поля попадает в запрос INSERT. Если установить false, Doctrine исключит эту колонку из запроса вставки, а значение будет проигнорировано при сохранении новой сущности. Это удобно для полей, которые заполняются триггерами базы данных или вычисляются на стороне СУБД.

Синтаксис

#[Column(type: type, insertable: false)]

Пример

Давайте объявим сущность с полем createdAt, значение которого выставляет триггер базы данных. Поле помечено insertable: false:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMTable(name: 'articles')] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMColumn(type: 'datetime', insertable: false)] private DateTimeInterface $createdAt; public function getId(): ?int { return $this->id; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getTitle(): string { return $this->title; } public function setCreatedAt(DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } public function getCreatedAt(): DateTimeInterface { return $this->createdAt; } } ?>

Теперь при сохранении новой сущности колонка created_at не попадёт в запрос INSERT, и значение выставит сама база данных.

Пример

Давайте сохраним новую сущность и проверим, какие данные попадут в базу:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $article->setCreatedAt(new DateTime()); $em->persist($article); $em->flush(); return new Response((string) $article->getId()); } } ?>

Результат выполнения SQL-запроса:

"INSERT INTO articles (title) VALUES ('abcde')"

Как видно, колонка created_at отсутствует в запросе, потому что для неё установлено insertable: false. Значение поля createdAt будет заполнено при чтении сущности из базы данных.

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

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