Атрибут Entity
Атрибут Entity вешается на класс
и превращает его в сущность Doctrine, связанную
с таблицей базы данных. Параметры repositoryClass
и readOnly позволяют задать репозиторий
и режим только для чтения соответственно.
Синтаксис
#[Entity(repositoryClass: repository, readOnly: readOnly)]
Пример
Давайте создадим простую сущность для хранения статей:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORM\Entity]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string')]
private string $title;
public function getId(): int
{
return $this->id;
}
public function getTitle(): string
{
return $this->title;
}
public function setTitle(string $title): void
{
$this->title = $title;
}
}
?>
Теперь сущность можно сохранить через менеджер сущностей:
<?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('hello');
$em->persist($article);
$em->flush();
return new Response('created');
}
}
?>
Результат выполнения кода:
created
Пример
Давайте укажем собственный класс репозитория через параметр repositoryClass:
<?php
namespace AppEntity;
use AppRepositoryArticleRepository;
use DoctrineORMMapping as ORM;
#[ORM\Entity(repositoryClass: ArticleRepository::class)]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string')]
private string $title;
}
?>
Теперь можно получить репозиторий и найти все записи:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function list(EntityManagerInterface $em): Response
{
$repository = $em->getRepository(Article::class);
$articles = $repository->findAll();
return new Response(count($articles));
}
}
?>
Результат выполнения кода:
0
Пример
Давайте включим режим только для чтения через параметр readOnly:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORM\Entity(readOnly: true)]
class Article
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string')]
private string $title;
}
?>
При попытке изменить такую сущность Doctrine выбросит исключение:
ReadOnlyException: Entity AppEntityArticle is read-only
Смотрите также
-
атрибут
Table,
который задаёт имя таблицы для сущности -
атрибут
Id,
который помечает поле первичным ключом -
атрибут
GeneratedValue,
который включает автогенерацию значения поля -
атрибут
Cache,
который настраивает кеширование запросов сущности