Doctrine – jak získat řádky na které nevedou žádné vazby

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lvq
Člen | 47
+
0
-

Ahoj, mám dvě tabulky, zjednodušeně: Article a Photo. Tyto dvě tabulky mají mezi sebou vazbu:

class Article
{
	/**
	 * @var Photo[]|ArrayCollection
	 * @ORM\OneToMany(targetEntity="Article", mappedBy="article")
	 */
	private $photos;
}

class Photo
{
	/**
	 * @var Article
	 * @ORM\ManyToOne(targetEntity="Article", inversedBy="photos")
	 * @ORM\JoinColumn(referencedColumnName="id", nullable=TRUE)
	 */
	private $article;
}

A teď potřebuji získat všechny články, ke kterým nejsou přiřazeny žádné fotky. Potřebuji to jako DQL, protože to budu kombinovat s dalšími dotazy.
Měl jsem zato, že bude fungovat toto:

$qb = $repository->createQueryBuilder();
$qb
	->select('a')
	->from(Article::class, 'a');
$qb
	->andWhere('a.id NOT IN (
			SELECT DISTINCT IDENTITY(psq.article)
			FROM ' . Photo::class . ' psq
	)');

ale nefuguje :-( Už mě nenapadá, jak to jinak udělat. Ten vnitřní SELECT správně vrací pole s id článků.

Díky za vaši pomoc.

jiri.pudil
Nette Blogger | 1034
+
+2
-
SELECT a FROM Article a WHERE a.photos IS EMPTY

?

lvq
Člen | 47
+
0
-

@jiri.pudil, díky funguje :-) Vůbec jsem na to klíčové slovo EMPTY při pátrání nenarazil :-[