【问题标题】: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

标签: php mysql symfony doctrine-orm


【解决方案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 我不明白,你是什么意思?你可以编辑你的答案吗?
猜你喜欢
  • 1970-01-01
  • 2022-08-17
  • 2017-04-03
  • 2018-12-18
  • 2016-09-06
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多