Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony][MySQL][doctrine] LEFT JOIN - nie zaciąga rekordu przy niespełnieniu warunku drugiej tabeli
mundeck
post
Post #1





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 2.09.2012

Ostrzeżenie: (0%)
-----


Mam w Symfony entity Product oraz Version - każdy produkt może posiadać wiele wersji, relacja one to many. W aplikacji wyświetlam tabelę produktów - w nagłówkach są dane z entity Product, a po kliknięciu z nagłówek pojawiają się dane poszczególnych wersji. Chciałbym, żeby nagłówek z danymi Product był wyświetlany nawet jeśli produkt nie posiada żadnych wersji. Problem w tym, że nie usuwam danych z bazy, a jedynie ustawiam pole "deleted_at" z datą usunięcia i przy zaciąganiu produktów do tabeli - jeśli nie chcę wyświetlać usuniętych wersji - to nie wyświetla mi się pusty produkt. Zapytanie wygląda tak:

  1. $products = $qb->select('p')
  2. ->from('MainBundle:Product', 'p')
  3. ->leftJoin('MainBundle:Version', 'v', 'WITH', 'p.id = v.product_id')
  4. ->where('p.deleted_at IS NULL')
  5. ->andWhere('v.deleted_at IS NULL')
  6. ->groupBy('p.id')
  7. ->getQuery()
  8. ->getResult(Query::HYDRATE_OBJECT)
  9. ;


Jeżeli wszystkie wersje są usunięte, to produkt nie zostanie wyświetlony, z kolei jeśli usunę warunek nałożony na wersje, to zostanie wyświetlony wraz z wersjami usuniętymi, co też nie powinno się zdarzyć. Początkowo oczekiwałem, że niespełnienie warunku przy drugiej tabeli zadziała tak, jakby nie było w niej dopasowania (wstawi nulle), tylko że to dopasowanie jest, ale niespełnienie warunku powoduje niepobranie całego rekordu. Myślałem o tym, żeby pobierać same produkty, a dopiero w Twigu nałożyć warunek "if version.deleted_at is null", ale z tego co czytałem powinno się unikać tego typu rozwiązań, gdyż wtedy kierowane są za każdym razem nowe, osobne zapytania do bazy ( do każdej wersji).
Co można poradzić?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 15:41