Я написал запрос и функцию, но не могу пройти эту логику. Мне нужно написать инструкцию, где я не могу сгенерировать то же значение токена снова, когда он отправляется в базу данных.
public function getToken($user, $token)
{
$tok = $this->getRepository()
->createQueryBuilder('pt')
->select('pt')
->where('pt.user = :user')
->andWhere('pt.token = :token')
->setParameter('user', $user)
->setParameter('token', $token)
->getQuery()
->getResult();
if(empty($token)) {
$tok = new Token();
$tok->setUser($user);
$tok->setToken($token);
$this->em->persist($tok);
$this->em->flush();
}
return $tok;
}
и в моем контроллере..
public function getTokenAction()
{
$this->requirePostParams(['user', 'token']);
$this->get('token')->getToken($this->getUser(), $this->data['token']);
return $this->success();
}
Итак, если это значение токена находится в db, не отправляйте его снова, а если нет, то да.
Ваша проблема в том, что вы создаете новый токен, когда токен параметра $ пуст, а не когда объект $ tok пуст.
Просто замените if(empty($token))
на if(empty($tok))
Вы также должны заменить ->getResult()
на ->getOneOrNullresult()
поскольку вам нужен только один токен объекта, а не массив.