Suas condições devem fazer parte da cláusula 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');
Colocando condições no
ON
cláusula (ao contrário da cláusula WHERE
) indica que eles se aplicam especificamente ao JOIN
. Se nenhuma linha atender a essas condições, não haverá junção — e é exatamente isso que você deseja neste caso. Colocando-os no WHERE
indica que o resultado as linhas devem satisfazer essas condições. E, obviamente, se não houve junção, você não pode satisfazer nenhuma condições sobre o j
tabela.