为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_笑_17 2023-04-21 10:42:43
$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();
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

使用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();


查看完整回答
反对 回复 2023-04-21
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信