Sus condiciones deben ser parte de la 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');
Poner condiciones en el ON
cláusula (a diferencia de WHERE
) indica que se aplican específicamente a JOIN
. Si ninguna fila cumple con esas condiciones, no hay unión, y eso es justo lo que desea en este caso. Poniéndolos en el WHERE
indica que el resultado las filas deben cumplir esas condiciones. Y, obviamente, si no hubo unión, no puede satisfacer ninguna condiciones sobre el j
mesa.