连接表中的 Symfony 4 查询元素(如果存在)

$avoidTags我有两个表 gifts 和 gift_tags 只有当礼物有标签时,我如何才能选择所有带有标签的礼物,这些标签不存在于数组中。我的查询现在的工作方式是只选择在 gift_tags 表中至少有一个标签并且不在$avoidTags数组中的礼物,但我还需要那些根本没有标签的礼物。

$response = $qb
            ->select('g, tags')
            ->leftJoin('g.tags', 'tags')
            ->andwhere($qb->expr()->notin("tags.name", ":avoidTags"))
            ->setParameters(new ArrayCollection([
                            new Parameter('avoidTags', $avoidTags),
            ]))
            ->getQuery()
            ->getResult();


qq_笑_17
浏览 128回答 1
1回答

素胚勾勒不出你

使用mysql,它可以用这个查询SELECT   gift.*, tag.* FROM   gift LEFT JOIN tag ON gift.id = tag.gift_id  WHERE gift.id NOT IN (    SELECT g.id FROM gift AS g LEFT JOIN tag AS t ON g.id = t.gift_id WHERE t.name IN ('test', 'test2')  )所以根据 QB 学说,它可能是这样的 $subQb = $this->_em->createQueryBuilder()            ->select('gift.id')            ->leftJoin('gift.tags', 'tags')            ->where($qb->expr()->orX(                $qb->expr()->in("tags.name", ":avoidTags")),            ))            ->getQuery();$response = $qb        ->select('g, tags')        ->leftJoin('g.tags', 't')        ->where($qb->expr()->notin("g.id", $subQb->getDql())))        ->setParameters(new ArrayCollection([            new Parameter('avoidTags', $avoidTags),        ]))        ->getQuery()        ->getResult();
打开App,查看更多内容
随时随地看视频慕课网APP