@TANK_IST

Как добавить валидацию на уникальное поле в doctrine?

Сущность
<?php
namespace OwrBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity(repositoryClass="OwrBundle\Entity\Repository\UserRepository")
 * @ORM\Table(name="`user`")
 * @ORM\HasLifecycleCallbacks()
 * @UniqueEntity(
 *     fields={"username", "phone"},
 *     message="duplicate"
 * )
 */
class User implements UserInterface
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", name="user_id")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", name="email", unique=true)
     * @Assert\Email(
     *     message = "email",
     *     checkMX = true
     * )
     */
    protected $username;

    /**
     * @ORM\Column(type="string", length=13, unique=true)
     * @Assert\Regex(
     *     pattern = "/^\+\d{12}$/",
     *     message = "correct"
     * )
     */
    protected $phone;

    /**
    ...
    **/
}


Ввожу номера телефона который уже есть в базе данных.
Но валидатор не отдает ошибку.
Её отдает уже сама база данных:
SQLSTATE[23505]: Unique violation: 7 ERROR: duplicate key value violates unique constraint "uniq_8d93d649444f97dd"
DETAIL: Key (phone)=(+180863723139) already exists.


Как заставить валидатора ловить ошибки?
  • Вопрос задан
  • 2072 просмотра
Решения вопроса 1
@jaxel
У вас валидатор UniqueEntity сразу на два поля указан. Он проверяет уникальность комбинации "username" и "phone". Вам нужно разделить их на два отдельных валидатора, а не указывать оба поля в одном.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы