У меня есть регистрационная форма с электронной почтой, которая должна быть уникальной. Что я хочу сделать, так это то, что если кто-то заполнит электронное письмо, которое уже зарегистрировано для другого пользователя, это кто-то, чтобы увидеть сообщение, написанное мной, а не что-то вроде
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin@domain.com' for key 'UNIQ_1483A5E9E7927C74'
Я пробовал это в классе репозитория:
public function getSameFriends ($email)
{
$q = $this->createQueryBuilder('f');
$q->select('f')
->where('f.email = :email')
->setParameter('email', $email);
return $q->getQuery()->getSingleScalarResult();
}
А затем это в контроллере:
$em = $this->getDoctrine()->getEntityManager();
$count = $em->getRepository('EMMyFriendsBundle:Friend')
->getSameFriends($friend->getEmail());
if($count != 0)
{
$this->get('session')->setFlash('notice', 'There already is a friend with this email!');
return $this->redirect($this->generateUrl('home_display'));
}
Но у меня есть исключение, что
No result was found for query although at least one row was expected.
500 Internal Server Error - NoResultException
Мне не нужен результат запроса, просто чтобы знать, 1 или 0 результат. Вы знаете, как это сделать?
1 ответ
Ты можешь сделать:
return count($q->getQuery()->getResult());
Кстати, вы смотрели на ограничение валидации uniqueEntity? Он предоставляет необходимые вам функциональные возможности прямо из коробки:
http://symfony.com/doc/current/reference/constraints/UniqueEntity.html
Похожие вопросы
Связанные вопросы
Новые вопросы
symfony
Symfony относится как к фреймворку PHP для создания веб-приложений, так и к набору компонентов, на которых строится фреймворк. Этот тег относится к поддерживаемым в настоящее время основным версиям 3.x, 4.x, 5.x и 6.x. Кроме того, вы можете указать точную версию, используя соответствующий тег. Этот тег не следует использовать для вопросов о Symfony 1.x. Вместо этого используйте тег Symfony1.