查询生成器 - 显示除用户回答之外的所有内容
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 我不明白,你是什么意思?你可以编辑你的答案吗?以上是关于查询生成器 - 显示除用户回答之外的所有内容的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]