Symfony - sensioframeworkextrabundle problem przy zapisie i odczycie relacji

0

Cześć, piszę sobie API i używam paczki jak w tytule do serializacji danych.. Wszystko byłoby ok gdyby nie błąd który pojawia się przy pracy z relacjami. Mam relację OneToMany, zarówno przy odczycie jak i zapisie danych mam taki błąd:

A circular reference has been detected when serializing the object of class \"App\\Entity\\NazwaKlasy(encji)" (configured limit: 1).

jak można sobie z tym poradzić?

2

Mam nadzieję, że wiesz co ten błąd oznacza? :)

Pomyśl sobie tak - masz encję użytkowników i komentarzy. Jeden komentarz ma referencję do użytkownika(autora), a użytkownik do wielu komentarzy.
Pobierając użytkownika, pobierasz np automatycznie jego komentarze, a komentarz sam w sobie pobiera dane autora. W tym momencie wpadamy w pętlę.

Skoro ten problem jest związany z serializacją danych, tak więc mógłbyś pewne pola wyłączyć z serializacji
https://symfony.com/doc/current/serializer.html#using-serialization-groups-annotations

0

a da się tego

$json = $serializer->serialize(
   $product,
   'json',
   ['groups' => 'show_product']
);

użyć w adnotacji?

0

Tak, tam w dokumentacji masz info, ze nad atrybutami klasy dodajesz adnotacje i okreslasz do jakiej grupy ma należeć.

0

i w kontrolerze, nad metodą też mam dodać Groups?

/**
     * @return View
     * @Rest\Get("/profiles")
     * @Groups({"profile", "category"})
     */
    public function getProfiles(): View
    {
        $profile = $this->objectRepository->findAll();

        return View::create($profile, Response::HTTP_OK);
    }

dodałem dwie grupy w encjach, jedną przy profile druga przy category, teraz chce ich użyć tutaj ale nadal to samo

0

no ok, dodałem w encji ale np w encji user tworzę jedną grupę "user" i dodaję ją do każdego a drugą w encji Category i dodaję ją do każdego pola w Category, tak? a co z relacjami?

0

Czy w tej jednej grupie user masz zawarts pole z referencja do innych encji?

0

udało mi się ogarnąć te grupy, dodatkowo w kontrolerze

     * @ViewAnnotations(serializerGroups={"driver_profile"})
z use FOS\RestBundle\Controller\Annotations\View as ViewAnnotations;

a jak nie działa --- zresetować dockera :D --- gdybym zresetował w pierwszej kolejności nie zmarnowałbym kilku godzin

1 użytkowników online, w tym zalogowanych: 0, gości: 1