Kondisi Anda harus menjadi bagian dari klausa 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');
Menempatkan kondisi di ON
klausa (sebagai lawan dari WHERE
) menunjukkan bahwa mereka berlaku khusus untuk JOIN
. Jika tidak ada baris yang memenuhi kondisi tersebut, tidak ada gabungan — dan itulah yang Anda inginkan dalam kasus ini. Menempatkan mereka di WHERE
menunjukkan bahwa hasil baris harus memenuhi kondisi tersebut. Dan jelas jika tidak ada yang bergabung, Anda tidak dapat memuaskan apa pun ketentuan tentang j
tabel.