jakis_login
10.08.2016, 15:36:48
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
10.08.2016, 15:53:59
A coż to za specjalne zapytanie potrzebujesz wykonać, że w encji chcesz dorwać entity manager?
jakis_login
11.08.2016, 08:12:10
no jest to select dość złożony który wykorzystuje między innymi if'y group by order i limit etc.
kapslokk
11.08.2016, 08:16:47
No dobra, ale czemu chcesz to umieścić w entity?
jakis_login
11.08.2016, 08:35:47
Bo chcę łatwo się odwołać juz w /src/AppBundle/Admin/ProgramAdmin.php w metodzie configureListFields (czyli na liście/tabeli programów):
$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
11.08.2016, 08:38:36
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
11.08.2016, 08:47:06
hmmm ale jak to wyświetlić na mojej liście w takim razie?
Damonsson
11.08.2016, 09:09:39
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:
class SuperEncja
{
private $entityManager;
public function __contruct($entityManager)
{
$this->entityManager= $entityManager;
}
W wywołaniu encji:
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
11.08.2016, 10:02:46
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
11.08.2016, 10:14:55
Ale jak? Jesteś czarodziejem?
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
11.08.2016, 11:51:08
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
11.08.2016, 12:11:42
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:
$listMapper->add('id', 'integer', array()) // z Entity $listMapper->add('mojaSuperMetodaWEntityRepository', 'integer', array()) // z Entity Repository
jakis_login
11.08.2016, 12:30:23
no to z EntityRepository mi nic nie wyświetla - jakby co to dodałem w encji:
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProgramRepository")
Damonsson
11.08.2016, 13:25:14
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.