Vos conditions doivent faire partie de la clause 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');
Mettre des conditions dans le ON
clause (par opposition à la clause WHERE
) indique qu'ils s'appliquent spécifiquement au JOIN
. Si aucune ligne ne satisfait ces conditions, il n'y a pas de jointure — et c'est exactement ce que vous voulez dans ce cas. Les mettre dans le WHERE
indique que le résultat les lignes doivent remplir ces conditions. Et évidemment s'il n'y avait pas de jointure, vous ne pouvez satisfaire aucune conditions sur le j
tableau.