【问题标题】:Syntax Error: line 0, col 72: Error: Expected end of string, got 'b6f037'语法错误:第 0 行,第 72 列:错误:预期的字符串结尾,得到 'b6f037'
【发布时间】:2021-07-23 18:19:30
【问题描述】:

我正在执行查询,但遇到一个奇怪的错误,我不明白它是如何工作的或为什么会发生。

我是 symfony 的新手,所以对我来说太赤裸裸了。

我的目标是:为表格选择,但我想排除当前用户数据。

    /**
 * @param int $getIndex
 * @param User $user
 * @return int|mixed|string
 */
public function findByIndex(int $getIndex, User $user)
{
    $queryBuilder = $this->createQueryBuilder('a');

    $query = $queryBuilder->where(
        $queryBuilder->expr()->eq('a.index', $getIndex),
        $queryBuilder->expr()->neq('a.user', $user->getId())
    )
    ->getQuery();

    return $query->getResult();
}

我想返回结果,但不希望当前用户回答。

并且错误是从neq抛出的。

"[Syntax Error] line 0, col 72: Error: Expected end of string, got 'b6f037' File:/home/wwwroot/htdocs/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php Line: 52"

这是我传入的

public function __construct(
    UserRepository $userRepository,
    AnswerRepository $answerRepository,
    TokenStorageInterface $tokenStorage
) {
    $this->userRepository = $userRepository;
    $this->answerRepository = $answerRepository;
    $this->user = $tokenStorage->getToken()->getUser();
}

$results = $this->answerRepository->findByIndex($dto->getIndex(), $this->user);
 

我该如何解决这个问题?

【问题讨论】:

  • 'b6f037'是索引值还是用户id?
  • 仍然想知道“'b6f037' 是索引值还是用户 ID?”

标签: php symfony doctrine-orm doctrine-query


【解决方案1】:

我认为问题的根源在于您传递的是用户 ID 而不是用户实体(DQL 使用对象)。 Doctrine 将处理结果查询中的索引。另外总是将您的变量设置为参数(Doctrine 将正确地转义值)。

尝试以下方法:

  public function findByIndex(int $getIndex, User $user)
  {
    $queryBuilder = $this->createQueryBuilder('a');

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

    return $query->getResult();
  }

【讨论】:

  • 嘿。这种作品。我不确定为什么我仍然得到实际登录用户的答案。 ->neq 错了吗?这个想法是; 1. 用户登录。 2. 用户给出答案 3. 该用户可以投票给其他人的答案,但不应该(neq)看到他自己的答案。当我用这个查询尝试它时,我仍然得到他输入的值。
  • 你知道原因吗?
  • 在不知道实体关系的情况下,我不确定那部分。尝试翻转表达式->where(...->neq(...))->andWhere(...->eq(...))。从技术上讲,这是一个已经有答案的不同问题。我的解决方案是否解决了您询问的错误?
猜你喜欢
  • 2018-12-18
  • 2019-12-20
  • 1970-01-01
  • 2017-12-08
  • 1970-01-01
  • 2014-03-03
  • 2016-11-09
  • 2019-01-24
  • 2020-01-02
相关资源
最近更新 更多