Метод getClassMetadata
Метод getClassMetadata класса EntityManager
возвращает объект ClassMetadata, который
содержит информацию о сущности: имя таблицы,
список полей, типы полей, связи и настройки
маппинга. Первым параметром передаётся имя
класса сущности (FQCN) или имя сущности.
Объект метаданных полезен, когда нужно получить список полей сущности, имя таблицы или тип конкретного поля без выполнения SQL-запроса.
Синтаксис
$metadata = $em->getClassMetadata(EntityClass::class);
Пример
Давайте получим метаданные сущности Article
и выведем имя таблицы и список полей:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/metadata', name: 'article_metadata')]
public function metadata(EntityManagerInterface $em): Response
{
$metadata = $em->getClassMetadata(Article::class);
$table = $metadata->getTableName();
$fields = $metadata->getFieldNames();
return new Response($table . ': ' . implode(', ', $fields));
}
}
?>
Результат выполнения кода:
article: id, title, text, views, published
Пример
Давайте получим тип конкретного поля сущности:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/field-type', name: 'article_field_type')]
public function fieldType(EntityManagerInterface $em): Response
{
$metadata = $em->getClassMetadata(Article::class);
$type = $metadata->getTypeOfField('title');
$nullable = $metadata->isNullable('title');
return new Response($type . ' nullable: ' . ($nullable ? 'yes' : 'no'));
}
}
?>
Результат выполнения кода:
string nullable: no
Пример
Давайте проверим, является ли поле идентификатором:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/article/id-field', name: 'article_id_field')]
public function idField(EntityManagerInterface $em): Response
{
$metadata = $em->getClassMetadata(Article::class);
$idFields = $metadata->getIdentifierFieldNames();
$isId = $metadata->isIdentifier('id');
return new Response(implode(', ', $idFields) . ' / ' . ($isId ? 'id' : 'not id'));
}
}
?>
Результат выполнения кода:
id / id
Смотрите также
-
класс
EntityManager,
который управляет сущностями Doctrine -
метод
getRepository,
который возвращает репозиторий сущности -
метод
find,
который находит сущность по идентификатору -
метод
getReference,
который возвращает ссылку на сущность