Метод getEntityManager
Метод getEntityManager класса ServiceEntityRepository возвращает объект EntityManager, который связан с репозиторием. Через него можно сохранять, обновлять и удалять сущности, а также работать с транзакциями. Метод не принимает параметров и доступен внутри любого репозитория, унаследованного от ServiceEntityRepository.
Синтаксис
public function getEntityManager(): EntityManagerInterface
Пример
Давайте сохраним новую сущность через метод getEntityManager внутри репозитория:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function save(Article $article): void
{
$em = $this->getEntityManager();
$em->persist($article);
$em->flush();
}
}
?>
Пример
Давайте удалим сущность через метод getEntityManager внутри репозитория:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function remove(Article $article): void
{
$em = $this->getEntityManager();
$em->remove($article);
$em->flush();
}
}
?>
Пример
Давайте выполним запрос через метод getEntityManager внутри репозитория:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function findPublished(): array
{
$em = $this->getEntityManager();
$query = $em->createQuery(
'SELECT a FROM App\Entity\Article a WHERE a.published = :published'
)->setParameter('published', true);
return $query->getResult();
}
}
?>
Результат выполнения кода:
[Article, Article, Article]
Смотрите также
-
класс
ServiceEntityRepository,
который является базовым классом для репозиториев -
метод
find,
который находит сущность по её идентификатору -
метод
findBy,
который находит сущности по заданным критериям -
метод
createQueryBuilder,
который создаёт построитель запросов Doctrine