Le tue condizioni dovrebbero far parte della clausola 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');
Mettere le condizioni in ON
clausola (al contrario di WHERE
) indica che si applicano specificamente al JOIN
. Se nessuna riga soddisfa queste condizioni, non c'è alcun join, ed è proprio quello che vuoi in questo caso. Mettendoli nel WHERE
indica che il risultato le righe devono soddisfare tali condizioni. E ovviamente se non c'è stato un join, non puoi soddisfare nessuno condizioni relative a j
tabella.