Twoje warunki powinny być częścią klauzuli LEFT JOIN ... ON.
$q = $this->createQuery('c')
->leftJoin('c.stJob j WITH j.expires_at > ? AND j.is_activated = 1 AND j.is_public = 1', date('Y-m-d h:i:s', time()))
->addOrderBy('c.name');
Umieszczanie warunków w ON
klauzula (w przeciwieństwie do WHERE
) wskazuje, że dotyczą one konkretnie JOIN
. Jeśli żadne wiersze nie spełniają tych warunków, nie ma sprzężenia — i właśnie tego chcesz w tym przypadku. Umieszczanie ich w WHERE
wskazuje, że wynik wiersze muszą spełniać te warunki. I oczywiście, jeśli nie było przyłączenia, nie możesz spełnić żadnego warunki dotyczące j
tabela.