Метод getReference
Метод getReference класса EntityManager
возвращает прокси-объект сущности по её
идентификатору. Первым параметром передаётся
имя класса сущности, вторым - значение
первичного ключа. В отличие от метода find,
запрос к базе данных сразу не выполняется:
реальные данные подгружаются из БД только при
первом обращении к свойствам прокси-объекта.
Если записи с таким идентификатором нет, то
при обращении к прокси-объекту будет выброшено
исключение EntityNotFoundException.
Синтаксис
$res = $em->getReference(className, id);
Пример
Давайте получим ссылку на сущность Article
с идентификатором 1 и выведем её заголовок:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$article = $em->getReference(Article::class, 1);
return new Response($article->getTitle());
}
}
?>
Результат выполнения кода:
"abcde"
Пример
Давайте получим ссылку на сущность и используем её в связях - например, проставим автора статьи по его идентификатору:
<?php
namespace App\Controller;
use App\Entity\Article;
use App\Entity\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(EntityManagerInterface $em): Response
{
$article = $em->getReference(Article::class, 1);
$user = $em->getReference(User::class, 5);
$article->setAuthor($user);
$em->flush();
return new Response('updated');
}
}
?>
Результат выполнения кода:
"updated"
Смотрите также
-
класс
EntityManager,
который управляет сущностями Doctrine -
метод
find,
который возвращает сущность по её идентификатору с запросом к БД -
метод
persist,
который ставит сущность в очередь на сохранение -
метод
flush,
который сохраняет изменения в базе данных