Неверный параметр: учетная запись токена не определена в запросе - PullRequest
0 голосов
/ 12 июня 2019

У меня определены два построителя запросов.

Первый: возвращает все учетные записи пользователя.

Секунды: возвращает все пользовательские транзакции по аккаунту.

Первый:

public function getAccountsList($user)
{
    return $this->getAccountRepository()
        ->createQueryBuilder('a')
        ->select('a')
        ->where('a.user = :user')
        ->setParameter('user', $user)
        ->getQuery()
        ->getResult();
}

Второе:

 public function  getTransactionsList($user)
{
    $accounts = $this->getAccountsList($user);

    $query = $this->getTransactionRepository()
        ->createQueryBuilder('t')
        ->select('t')
        ->where('t.account IN (:accounts)')
        ->setParameter('account', $accounts)
        ->getQuery()
        ->getResult();

    return $query;
}

Первый работает отлично, а второй выдает ошибку:

Неверный параметр: учетная запись токена не определена в запросе

Как это исправить?

Ответы [ 2 ]

3 голосов
/ 12 июня 2019

token account is not defined in the query

Это означает, что ->setParameter('account', ...) находится где угодно, это запрос

в вашем ->where вы установили токен :accounts с S и концом,опечатка

Правильный ответ

public function  getTransactionsList($user) {
    $accounts = $this->getAccountsList($user);

    $query = $this->getTransactionRepository()
        ->createQueryBuilder('t')
        ->select('t')
        ->where('t.account IN (:accounts)')
        ->setParameter('accounts', $accounts)
        ->getQuery()
        ->getResult();

    return $query;
}
0 голосов
/ 12 июня 2019

У вас есть опечатка в параметрах учетной записи

 public function  getTransactionsList($user)
{
    $accounts = $this->getAccountsList($user);

    $query = $this->getTransactionRepository()
        ->createQueryBuilder('t')
        ->select('t')
        ->where('t.account IN (:accounts)')
        ->setParameter('account', $accounts)
        ->getQuery()
        ->getResult();

    return $query;
}

Как вы видите ...

->where('t.account IN (:accounts)')

->setParameter('account', $accounts)

Одна - это учетная запись, а другая - учетная запись.Должно быть:

 public function  getTransactionsList($user)
{
    $accounts = $this->getAccountsList($user);

    $query = $this->getTransactionRepository()
        ->createQueryBuilder('t')
        ->select('t')
        ->where('t.account IN (:accounts)')
        ->setParameter('accounts', $accounts)
        ->getQuery()
        ->getResult();

    return $query;
}
...