UniqueEntity

Valida que un campo en particular (o campos) en una entidad Doctrine sea único. Este se utiliza comúnmente, por ejemplo, para prevenir que un nuevo usuario se registre con una dirección de correo electrónico existente en el sistema.

Applies to class
Options
Class Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity
Validator Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator

Uso básico

Supongamos que tienes un AcmeUserBundle con una entidad User que tiene un campo email. Puedes utilizar la restricción UniqueEntity para garantizar que el campo email siga siendo único en toda tu tabla User:

  • YAML
    # src/Acme/UserBundle/Resources/config/validation.yml
    Acme\UserBundle\Entity\Author:
        constraints:
            - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email
        properties:
            email:
                - Email: ~
    
  • Annotations
    // Acme/UserBundle/Entity/User.php
    namespace Acme\UserBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    use Doctrine\ORM\Mapping as ORM;
    
    // ¡NO OLVIDES usar esta declaración!
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    
    /**
     * @ORM\Entity
     * @UniqueEntity("email")
     */
    class Author
    {
        /**
         * @var string $email
         *
         * @ORM\Column(name="email", type="string", length=255, unique=true)
         * @Assert\Email()
         */
        protected $email;
    
        // ...
    }
    
  • XML
    <class name="Acme\UserBundle\Entity\Author">
        <constraint name="Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity">
            <option name="fields">email</option>
            <option name="message">This email already exists.</option>
        </constraint>
        <property name="email">
            <constraint name="Email" />
        </property>
    </class>
    
  • PHP
    // Acme/UserBundle/Entity/User.php
    namespace Acme\UserBundle\Entity;
    
    use Symfony\Component\Validator\Constraints as Assert;
    
    // ¡NO OLVIDES usar esta declaración!
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    
    class Autor
    {
        public static function loadValidatorMetadata(ClassMetadata $metadata)
        {
            $metadata->addConstraint(new UniqueEntity(array(
                'fields'  => 'email',
                'message' => 'This email already exists.',
            )));
    
            $metadata->addPropertyConstraint(new Assert\Email());
        }
    }
    

Opciones

fields

tipo: array | string [opción predeterminada]

Esta opción requerida es el campo (o lista de campos) en el cual esta entidad debe ser única. Por ejemplo, si has especificado ambos campos email y name en una sola restricción UniqueEntity, entonces esta debería forzar a que la combinación de valores sea única (por ejemplo, dos usuarios pueden tener la misma dirección de correo electrónico, siempre y cuando no tengan el mismo nombre también).

Si necesitas requerir dos campos únicos individualmente (por ejemplo, una dirección de correo electrónico única y un nombre de usuario), utiliza dos entradas UniqueEntity, cada una con un solo campo.

message

tipo: string predefinido: This value is already used. (Este valor ya se está usando)

El mensaje a mostrar cuando esta restricción falla.

em

tipo: string

El nombre del gestor de entidades que hará la consulta para determinar la unicidad. Si lo dejas en blanco, el gestor de entidades correcto será determinado por esta clase. Por esa razón, probablemente no será necesario utilizar esta opción.

repositoryMethod

tipo: string predefinido: findBy

Nuevo en la versión 2.1: The repositoryMethod option was added in Symfony 2.1. Before, it always used the findBy method.

The name of the repository method to use for making the query to determine the uniqueness. If it’s left blank, the findBy method will be used. This method should return a countable result.

Bifúrcame en GitHub