Wpis z mikrobloga

#symfony #doctrine Pobieram encję A z repozytorium (findBy), następnie przypisuję tą encję do encji B (które są w relacji OneToMany). Standardowo ->setEntityB($entityB);. Symfony zwraca mi błąd, że encja A jest niesperzystowana. Jakim cudem, jeśli pobieram ją z bazy, przy użyciu metody Symfony?

#php #webdev #programowanie
  • 11
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@MirkoDigger: >* A new entity was found through the relationship 'App\Entity\Team#league' that was not configured to cascade persist operations for entity: App\Entity\League@0000000022a95be500000000603dc484. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'App\Entity\League#__toString()' to get a clue.

Encja League ma jedno pole Unique,
  • Odpowiedz
@Jurix: brzmi dziko, nie masz jakichś listenerów/extensionów które na to mogą wpływać i robić detach? Jak masz skonfigurowane pola ID w obu encjach, zwykłe numeryczne IDki i nic więcej? Jeżeli nie, to może być przyczyną - Doctrine nie lubi złożonych sytuacji dla PK. W repo nie masz przypadkiem nadpisania tej metody? Możesz spróbować dumpnąć zawartość UoW i zobaczyć czy tam w ogóle jest ta encja - bo jeżeli jej tam
  • Odpowiedz
@aso824: Udało mi się ustalić, że przyczyną jest korzystanie z różnych instancji EM w klasie skąd pobieram Encję League, a gdzie zapisuję Team. Próbowałem ugryźć to od drugiej strony i do League przypisywać addTeam, ale też mam jakieś problemy.

Tymczasowo ogarnąłem to dając depraceted $em->merge(), które... działa tak jak potrzebuję.
  • Odpowiedz
@aso824: Uhm, wywołałem je przez DI w 2 różnych serwisach, 1 do wyciągania danych ze źródła, drugie w zapisie.

Nie mam pewności co do tej diagnozy, takie coś znalazłem na stacku i się nie zagłębiałem.
  • Odpowiedz
@bmLq: @aso824:

Entity manager injected into my service are lazy loaded, but entity manager injected in Repository, defined as service, are not lazy loaded. So Entity are managed by different instances of a same "manager configuration".


Takie wyjaśnienie znalazłem.

Teoretycznie $this->em->getRepository miało rozwiązać problem... ale nie rozwiązuje.
  • Odpowiedz