1
resposta

[Dúvida] Erro no código por conta do getPartialReference

Meu código está igualzinho e não consigo entender porque tenho esse erro de método desconhecido

<?php

namespace App\Controller;

use App\Entity\Series;
use Doctrine\ORM\EntityManager;
use App\Repository\SeriesRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class SeriesController extends AbstractController
{

    public function __construct(
        private SeriesRepository $seriesRepository, 
        private EntityManagerInterface $entityManager)
    {
    }

    #[Route(path: '/series', name: 'app_series', methods: ['GET'])]
    public function seriesList(): Response
    {
        $seriesList = $this->seriesRepository->findAll();

            return $this->render('series/index.html.twig',
             [
            'seriesList' => $seriesList,
        ]);
    }
    #[Route(path:'/series/create', name: 'app_series_form', methods: ['GET'])]
    public function addSeriesForm(): Response
    {
        return $this->render('series/form.html.twig');
    }

    #[Route(path: '/series/add',name:'app_add_series', methods: ['POST'])]
    public function addSeries(Request $request, EntityManagerInterface $entityManager): Response
    {
        $seriesName = $request->request->get('name');
        $series = new Series($seriesName);
    
        $entityManager->persist($series);
        $entityManager->flush();
    
        return new RedirectResponse('/series');
    }

    #[Route(path:'/series/delete')]
    public function deleteSeries(Request $request): Response
    {
        $id = $request->query->getInt('id');

        $series = $this->entityManager->getPartialReference(Series::class, $id);
        $this->seriesRepository->remove($series, true);

        return new RedirectResponse('/series');
        }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
  • Soluções possíveis Opção 1: Substituir o método por getReference() Se tudo que você quer é obter uma referência sem carregar a entidade do banco (o que é o caso com getPartialReference()), use:
$series = $this->entityManager->getReference(Series::class, $id);

Esse método está definido na interface EntityManagerInterface, então é seguro usá-lo nesse contexto.

getReference() é geralmente suficiente para deleções simples, pois retorna um proxy da entidade pelo ID — sem fazer SELECT.

Opção 2: Tipar explicitamente como EntityManager Se você realmente precisar de getPartialReference() (casos muito específicos), poderia fazer:

use Doctrine\ORM\EntityManager;

private EntityManager $entityManager

Mas não é recomendável a menos que você tenha um motivo específico. O ideal é trabalhar sempre com a interface (EntityManagerInterface) por questões de boas práticas e desacoplamento.

✅ Como corrigir no seu caso específico: Troque esta linha:

$series = $this->entityManager->getPartialReference(Series::class, $id);

Por esta:

$series = $this->entityManager->getReference(Series::class, $id);

E o erro desaparecerá.