查询生成器 - 显示除用户回答之外的所有内容

Posted

技术标签:

【中文标题】查询生成器 - 显示除用户回答之外的所有内容【英文标题】:Query builder - display everything besides the users answer 【发布时间】:2021-07-24 23:43:05 【问题描述】:

我有以下问题要解决。

我想显示除自己的用户回答之外的所有内容。举个例子吧。

第 1 步:用户输入问题的答案

第 2 步:我将答案保存到数据库中

第 3 步:用户现在可以为其他人的问题投票

第 3 步*:在这里我显示所有现有问题,但我不希望显示当前用户的答案。

这是我的查询。 (在 AnswerRepository 中)

    $query = $queryBuilder
        ->where($queryBuilder->expr()->neq('a.user', ':user'))
        ->andWhere($queryBuilder->expr()->eq('a.diveIndex', ':diveIndex'))
        ->setParameter('diveIndex', $getDiveIndex)
        ->setParameter('user', $user)
        ->getQuery();

    return $query->getResult();

遗憾的是,第一个 where 并没有真正起作用,因为当我列出所有答案时,我仍然可以看到当前用户的问题。

回答实体:

/**
 * @ORM\ManyToOne(targetEntity=User::class, inversedBy="answerBody", cascade="persist", "remove")
 */
private $user;

用户实体:

/**
 * @ORM\OneToMany(targetEntity=Answer::class, mappedBy="user", cascade="persist", "remove")
 */
private $answerBody;

控制器调用:

 $answers = $this->answerRepository->findByIndexAndUser($dto->geIndex(), $this->user);

【问题讨论】:

某处是否涉及问题实体?您提到问题和答案,但代码仅显示答案。我有一种感觉,您只过滤/隐藏来自自己用户的答案,而不是问题(如果存在这样的问题) - 在这种情况下,您可能想加入问题表/关系并将用户应用到那个. 嘿。不,没有问题实体。 能否请您使用与此相关的完整方法和实体类扩展您粘贴的代码?从这里的情况来看,没有什么奇怪的。此外,对于简单的条件,您不需要 expr(),例如$queryBuilder->expr()->neq('a.user', ':user')'a.user <> :user' 一样好而且在您的控制器中,您似乎使用 $this->user 而不是通常的 $this->getUser() - 您确定传递的用户实际上不是 null 【参考方案1】:
$query = $this->getEntityManager()
            ->createQuery("SELECT a FROM Answer a WHERE a.userId != :userId AND a.diveIndex = :diveIndex")
->setParameter('userId', $user->getId())
->setParameter('diveIndex', $getDiveIndex);

return $query->getResult();

如果您的 Answer 类中有 userId 属性。

【讨论】:

使用实体对象作为参数是完全可以接受的,不需要强行转换为ID。当您拥有多列主键(实体标识符)时,这变得更加方便 您好,很遗憾我收到了[Semantical Error] line 0, col 14 near 'Answer a WHERE': Error: Class 'Answer' is not defined. 尝试全类名(FQCN) @mkilmanas 谢谢,我从未尝试过使用对象 @MichaelKrutikov 我不明白,你是什么意思?你可以编辑你的答案吗?

以上是关于查询生成器 - 显示除用户回答之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

使 .gitignore 忽略除少数文件之外的所有内容

如何在 Laravel 4 中查询除一个之外的所有内容?

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]

在未过滤以显示所有文件的 FileOpenPicker 中显示除“所有文件”之外的其他内容

如何授予 IAM 组访问除创建新用户之外的所有内容的权限?

SQL 选择除最近日期之外的所有内容