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
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.