Dina villkor bör vara en del av LEFT JOIN ... ON-klausulen.
$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');
Sätta villkor i ON
sats (i motsats till WHERE
) indikerar att de gäller specifikt för JOIN
. Om inga rader uppfyller dessa villkor, finns det ingen join – och det är precis vad du vill ha i det här fallet. Lägger in dem i WHERE
indikerar att resultatet rader måste uppfylla dessa villkor. Och självklart kan du inte tillfredsställa någon om det inte fanns någon medlem villkor om j
bord.