Вашите условия трябва да са част от клаузата 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');
Поставяне на условия в ON
клауза (за разлика от WHERE
) показва, че те се отнасят конкретно за JOIN
. Ако няма редове, които отговарят на тези условия, няма присъединяване — и това е точно това, което искате в този случай. Поставянето им в WHERE
показва, че врезултатът редовете трябва да отговарят на тези условия. И очевидно, ако не е имало присъединяване, не можете да удовлетворитеникое условия за j
таблица.