我写了一个查询和一个函数,但我不能传递这个逻辑。我需要写一个语句,当它发布到数据库时,我不能再次生成相同的令牌值。
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中,就不要再发布它,如果不是,那么是的。
1条答案
按热度按时间j7dteeu81#
您的问题是,仅当参数$token为空时才创建新令牌,而不是当对象$tok为空时。
简单地替换
if(empty($token))
由if(empty($tok))
你也应该替换->getResult()
由->getOneOrNullresult()
因为您只需要一个对象标记,而不是数组。