Bonjour à tous,

J'aimerai savoir comment créer une fonction dans le repository permettant de filtrer sur des éléments qui ne fassent pas partie d'une collection donnée :

J'ai une entité "galerie" qui dispose d'une collection "tags" j'aurai besoin d'un filtre ramenant tous les tags exceptés ceux déjà présents dans la collection (many to many) de la galerie active... du genre :

"SELECT tag FROM TagsRepository WHERE tag NOT IN ("SELECT galerie.tags WHERE galerieID = :galerieID")"

Je ne sais pas comment monter ça en dql et si le NOT IN sera suffisamment rapide, il me semble qu'il existe des filtres spécifiques sur les collections, mais est-ce recommandé ici ?

Merci de m'aider à constituer la future requête

1 réponse


Salut, je déterre peut-être mais as tu essayé quelque chose comme:

public function findTagsNotInGalerie(int $galerieId)
{
    return $this->createQueryBuilder('t')
        ->where('t.id NOT IN (
            SELECT tag.id
            FROM App\Entity\Galerie g
            JOIN g.tags tag
            WHERE g.id = :galerieId
        )')
        ->setParameter('galerieId', $galerieId)
        ->getQuery()
        ->getResult();
}