Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][ZF] Zend_Db i Join, warunki z parametrem
Forum PHP.pl > Forum > PHP > Frameworki
singollo
Witam,

Zadanie: stworzyć zapytanie, które wyciągnie informacje o treści związanej z węzłem drzewa dla danego profilu. Jeżeli dla kombinacji węzeł/profil nie ma treści, powinno zwrócić przy odpowiednim profilu NULL

mam taki kod:
  1. $profileQuery
  2. ->from(array ('p' => 'profile'), array('p.profileId', 'p.name as profileName'))
  3. ->joinLeft(array('n' => 'node_content'), 'n.profileId = p.profileId', 'n.contentId')
  4. ->where('n.nodeId = ?', $nodeId)
  5. ;

co generuje taki kod:
  1. SELECT
  2. p.profileId, p.name AS profileName, n.contentId
  3. FROM profile p
  4. LEFT JOIN node_content n ON n.profileId = p.profileId
  5. WHERE n.nodeId = $nodeId


nie dziala on jednak prawidłowo - umieszczenie warunku dla nodeId w klauzuli where blokuje wyświetlanie pustych profili. Muszę przenieść ten warunek do warunków złączenia, czyli uzyskać taki kod:

  1. SELECT
  2. p.profileId, p.name AS profileName, n.contentId
  3. FROM profile p
  4. LEFT JOIN node_content n ON n.profileId = p.profileId AND n.nodeId = $nodeId


Jak to elegancko zapisać w kodzie PHP, bez chamskiego pisania:
  1. ->joinLeft(array('n' => 'node_content'), "n.profileId = p.profileId and n.nodeId = $nodeId" , 'n.contentId')

czyli żeby korzystać w dobrodziejstw filtrowania parametrów tak jak w metodzie where()?
snapshot
Zamień warunek na ten kod i będzie elegancko smile.gif
  1. $adapter->quoteInto('n.profileId = p.profileId and n.nodeId = ?', $nodeId)
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.