Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][Symfony2]Przesyłanie wyniku akcji do szablonu
Forum PHP.pl > Forum > PHP > Frameworki
mimol
Witam.
Mam tabelę z kategoriami i tabelę categorysub połączoną relacją ToManyOne z tabelą kategorie

Zeby wyświetlić wszystkie kategorie wraz z podkategoriami używam widoków częściowych.
Np szablon z DsipalyCatAction

Kod
{% for category in categories%}
    {{ link(category, path('category_show', {'id': category.id})) }}
    {% include 'MyMoviesBundle:CategorySub:_list.html.twig' with  {'categoriessub': category.categorysub} %}
    <br />
{% endfor %}

Pojawił się pewien problem, ponieważ nie każda kategoria ma pod kategorię i jak dla mnie jest kilka niepotrzebnych zapytań do bazy.
Napisałem sobie funkcje-Akcje która zwraca ID wszystkich kategorii, które mają podkategorie.

Jednak nie wiem jak mieć dostęp do wyniku tej akcji.
Oczywiście mogę użyc render, ale to tylko wyświetla, nadal w _list.twig.html nie mam dostępu do tej zmiennej

Wymyśliłem sobie tak
Kod
{% for category in categories%}
    {{ link(category, path('category_show', {'id': category.id})) }}
    {% if category.id in result %}
    {% include 'MyMoviesBundle:CategorySub:_list.html.twig' with  {'categoriessub': category.categorysub} %}
    {% endif %}
    <br />
{% endfor %}

Jednak jak mieć dostęp do zmiennej result (wynik akcji, która zwraca mi ID kategorii, które mają podkategorie)?
Crozin
Cytat
Pojawił się pewien problem, ponieważ nie każda kategoria ma pod kategorię i jak dla mnie jest kilka niepotrzebnych zapytań do bazy.
Dlaczego więc nie pobierzesz kategorii wraz z ich podkategoriami od razu w jednym zapytaniu?
mimol
Rozwiązałem powyższy problem z małą pomocą ludzi z #symfony
Crozin. Czy mógłbyś podpowiedzieć jak takie zapytanie mogło by wyglądać?
Domyślam się, że mógłbym to dostać wynik jako czysty tekst, ale da się tak aby wygenerował od razu odłowienie Entities?
Crozin
Zapewne korzystasz z Doctrine, więc DQL:
  1. SELECT c, sc FROM My\CategoryEntity c JOIN c.subcategories;
mimol
Struktura tabeli category to
id| name| slug|

Struktura subcategory to
id|name|slug|category_id

Wiec muszę zacząc od 'tylu',
  1. SELECT c, sc FROM MyMoviesBundle:CategorySub sc JOIN sc.category c'

Zwraca mi
  1. SELECT c0_.id AS id0, c0_.name AS name1, c0_.slug AS slug2, c1_.id AS id3, c1_.name AS name4, c1_.slug AS slug5, c0_.category_id AS category_id6
  2. FROM CategorySub c0_
  3. INNER JOIN Category c1_ ON c0_.category_id = c1_.id
  4. LIMIT 0 , 30

Dostaje po prostu zawartość tabeli categorysub

Ja się tego joina napisać poprawnie?
Crozin
Dokładnie tak jak Ci podałem post wcześniej.
mimol
  1. SELECT c, sc FROM MyMoviesBundle:Category c JOIN c.categorysub

[Semantical Error] line 0, col 10 near 'sc FROM MyMoviesBundle:Category': Error: 'sc' is not defined.
Crozin
Podstawy DQL-a, niezdefiniowane sc jako alias dla c.categorysub - co to za dziwna nazwa, dlaczego nie "subcategory"?
mimol
teraz też wydaje mi się głupie, ale chciałem żeby (uzywając phpmyadmina) subcategory było pod category (sortowanie tabel wg nazw)
  1. SELECT c, sc FROM MyMoviesBundle:Category c LEFT JOIN c.categorysub sc

Jeszcze tylko poprawiłem joina na left
===========================================
Czy jest możliwe, aby doctrine samo potrafiło skonstruktować takie zapytanie?
Mam poczytać o Lazy, Extra lazy fetch? czy to jest niemożliwe i zawsze sam musze pisać takie zapytania?
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.