Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony]entity manager w encji
Forum PHP.pl > Forum > PHP > Frameworki
jakis_login
Pracuje na sf 3.
Mam "doinstalowaną" Sonatę
Pytanie: Jak pobrać em w środku encji? czy w ogóle się da? Potrzebne mi to do wykonania specjalengo zapytania na bazie. W kontrolerze to wiem jak pobrać natomiast gorzej w encji.
kapslokk
A coż to za specjalne zapytanie potrzebujesz wykonać, że w encji chcesz dorwać entity manager?
jakis_login
no jest to select dość złożony który wykorzystuje między innymi if'y group by order i limit etc.
kapslokk
No dobra, ale czemu chcesz to umieścić w entity?
jakis_login
Bo chcę łatwo się odwołać juz w /src/AppBundle/Admin/ProgramAdmin.php w metodzie configureListFields (czyli na liście/tabeli programów):
  1. $listMapper->add('programs.countmath', 'integer', array())

i teraz jeśli w encji dam metodę getCountmath i tam moje zapytanie ze zwróconą wartością to na tej liście ładnie mi wyświetli wyniki
kapslokk
A pomyślałeś, że w takim przypadku dla 100 elementów na liście wykonasz 100 zapytań? Nie uważasz, że to troche zbyt dużo? Nie lepiej w Repository stworzyć odpowiednią metodę do pobierania danych, które są Ci potrzebne w jednym zapytaniu?
jakis_login
hmmm ale jak to wyświetlić na mojej liście w takim razie?
Damonsson
Kompletnie nie wiem o co Ci chodzi, wytłumacz dokładnie co chcesz osiągnąć, a nie zadawaj złych pytań. Wygląda na problem typu: Chcesz usmażyć upolowanego dzika, a na forum pytasz, jak rozpalić w domu ognisko. Na 99% rozpalenie ogniska w domu jest niepotrzebne.

Jeśli chcesz zrobić śmietnik w kodzie, to możesz sobie wywołać tam entity manager.

W encji:
  1.  
  2. class SuperEncja
  3. {
  4.  
  5. private $entityManager;
  6.  
  7. public function __contruct($entityManager)
  8. {
  9. $this->entityManager= $entityManager;
  10. }


W wywołaniu encji:

  1. new SuperEncja($entityManager)


Ale to jest słabe.


Z tego co zrozumiałem, musisz użyć entity repository, a nie pakować to do entity. A więc: https://symfony.com/doc/current/doctrine.ht...ository-classes + https://symfony.com/doc/current/doctrine/repository.html
jakis_login
no wiem, że to jest słabe ale i tak nie o to mi chodziło bo w Twoim przykładzie i tak musze podac w parametrze konstrukora entity managera a mi chodzi aby go nie przekazywac tylko poprostu skorzystać z niego w encji
Damonsson
Ale jak? Jesteś czarodziejem? biggrin.gif

W gwoli ścisłości DependencyInjection jest bardzo sympatyczne. Słabe jest pakowanie do encji metod, zwracających wyniki customowych zapytań.

Entity repository służy do tego co chcesz zrobić, albo przynajmniej tak mi się wydaje, co chcesz zrobić. Przeczytaj sobie dokumentację (wklejam jeszcze raz) https://symfony.com/doc/current/doctrine/repository.html
jakis_login
Dobra to z innej beczki...
Jak w /src/AppBundle/Admin/ProgramAdmin.php w metodzie configureListFields (czyli na liście/tabeli programów) dodać dodatkowo swoją kolumnę aby przy każdym wierszu była inna wartość która będzie pochodzić z zapytania/metody w encji czy repository obojętnie?
Damonsson
Zakładam, że używasz Sonata Admin Bundle. Nie używam, więc pewien nie jestem, ale tak samo jak metody z encji, tak samo powinieneś móc pobrać metody z entity repository:


  1. $listMapper->add('id', 'integer', array()) // z Entity
  2. $listMapper->add('mojaSuperMetodaWEntityRepository', 'integer', array()) // z Entity Repository
jakis_login
no to z EntityRepository mi nic nie wyświetla - jakby co to dodałem w encji:
  1. * @ORM\Entity(repositoryClass="AppBundle\Repository\ProgramRepository")
Damonsson
Pewnie musiałbyś to jeszcze dodać do Forma. A z ciekawości co ma być w metodzie programs.countmath?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.