UniqueEntity

Validates that a particular field (or fields) in a Doctrine entity is (are) unique. This is commonly used, for example, to prevent a new user to register using an email address that already exists in the system.

Doctrine エンティティの特定のフィールド (または複数のフィールド) が一意であることを検証します。これは、たとえば、新しいユーザーがシステムに既に存在する電子メール アドレスを使用して登録するのを防ぐためによく使用されます。

See also

こちらもご覧ください

If you want to validate that all the elements of the collection are unique use the Unique constraint.

コレクションのすべての要素が一意であることを検証する場合は、Unique 制約を使用します。

Note

ノート

In order to use this constraint, you should have installed the symfony/doctrine-bridge with Composer.

この制約を使用するには、Composer で symfony/doctrine-bridge をインストールする必要があります。
Applies to class
Class UniqueEntity
Validator UniqueEntityValidator

Basic Usage

Suppose you have a User entity that has an email field. You can use the UniqueEntity constraint to guarantee that the email field remains unique between all of the rows in your user table:

電子メール フィールドを持つユーザー エンティティがあるとします。 UniqueEntity 制約を使用して、ユーザー テーブルのすべての行間で email フィールドが一意であることを保証できます。
  • Attributes
    属性
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// src/Entity/User.php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

// DON'T forget the following use statement!!!
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity]
#[UniqueEntity('email')]
class User
{
    #[ORM\Column(name: 'email', type: 'string', length: 255, unique: true)]
    #[Assert\Email]
    protected $email;
}

Caution

注意

This constraint doesn't provide any protection against race conditions. They may occur when another entity is persisted by an external process after this validation has passed and before this entity is actually persisted in the database.

この制約は、競合状態に対する保護を提供しません。競合状態は、この検証が通過した後、このエンティティが実際にデータベースに永続化される前に、外部プロセスによって別のエンティティが永続化される場合に発生する可能性があります。

Caution

注意

This constraint cannot deal with duplicates found in a collection of items that haven't been persisted as entities yet. You'll need to create your own validator to handle that case.

この制約は、エンティティとしてまだ永続化されていないアイテムのコレクションで見つかった重複を処理できません。その場合を処理するには、独自のバリデーターを作成する必要があります。

Options

em

type: string

タイプ: 文字列

The name of the entity manager to use for making the query to determine the uniqueness. If it's left blank, the correct entity manager will be determined for this class. For that reason, this option should probably not need to be used.

クエリを作成して一意性を判断するために使用するエンティティ マネージャの名前。空白のままにすると、このクラスの正しいエンティティ マネージャが決定されます。そのため、このオプションを使用する必要はおそらくないはずです。

entityClass

type: string

タイプ: 文字列

By default, the query performed to ensure the uniqueness uses the repository of the current class instance. However, in some cases, such as when using Doctrine inheritance mapping, you need to execute the query in a different repository. Use this option to define the fully-qualified class name (FQCN) of the Doctrine entity associated with the repository you want to use.

デフォルトでは、一意性を確保するために実行されるクエリは、現在のクラス インスタンスのリポジトリを使用します。ただし、Doctrineinheritance マッピングを使用する場合など、場合によっては、別のリポジトリでクエリを実行する必要があります。このオプションを使用して、使用するリポジトリに関連付けられた Doctrineentity の完全修飾クラス名 (FQCN) を定義します。

errorPath

type: string default: The name of the first field in fields

タイプ: 文字列 デフォルト: フィールドの最初のフィールドの名前

If the entity violates the constraint the error message is bound to the first field in fields. If there is more than one field, you may want to map the error message to another field.

エンティティが制約に違反している場合、エラー メッセージはフィールドの最初のフィールドにバインドされます。複数のフィールドがある場合は、エラー メッセージを別のフィールドにマップすることができます。

Consider this example:

次の例を検討してください。
  • Attributes
    属性
  • YAML
    YAML
  • XML
    XML
  • PHP
    PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// src/Entity/Service.php
namespace App\Entity;

use App\Entity\Host;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

#[ORM\Entity]
#[UniqueEntity(
    fields: ['host', 'port'],
    errorPath: 'port',
    message: 'This port is already in use on that host.',
)]
class Service
{
    #[ORM\ManyToOne(targetEntity: Host::class)]
    public $host;

    #[ORM\Column(type: 'integer')]
    public $port;
}

Now, the message would be bound to the port field with this configuration.

これで、メッセージはこの構成でポート フィールドにバインドされます。

fields

type: array | string [default option]

タイプ: 配列 |文字列 [デフォルト オプション]

This required option is the field (or list of fields) on which this entity should be unique. For example, if you specified both the email and name field in a single UniqueEntity constraint, then it would enforce that the combination value is unique (e.g. two users could have the same email, as long as they don't have the same name also).

この必須オプションは、このエンティティが一意である必要があるフィールド (またはフィールドのリスト) です。たとえば、1 つの UniqueEntity 制約で電子メールと名前フィールドの両方を指定した場合、組み合わせ値が一意であることが強制されます (たとえば、2 人のユーザーが同じ名前を持っていない限り、2 人のユーザーが同じ電子メールを持つことができます)。

If you need to require two fields to be individually unique (e.g. a unique email and a unique username), you use two UniqueEntity entries, each with a single field.

2 つのフィールドを個別に一意にする必要がある場合 (たとえば、一意の電子メールと一意のユーザー名)、2 つの UniqueEntity エントリをそれぞれ 1 つのフィールドで使用します。

groups

type: array | string

タイプ: 配列 |ストリング

It defines the validation group or groups of this constraint. Read more about validation groups.

この制約の検証グループを定義します。検証グループの詳細を参照してください。

ignoreNull

type: boolean default: true

タイプ: ブール デフォルト: true

If this option is set to true, then the constraint will allow multiple entities to have a null value for a field without failing validation. If set to false, only one null value is allowed - if a second entity also has a null value, validation would fail.

このオプションが true に設定されている場合、制約により、検証に失敗することなく、複数のエンティティがフィールドに null 値を持つことが許可されます。 false に設定されている場合、1 つの null 値のみが許可されます。2 番目のエンティティにも null 値がある場合、検証は失敗します。 .

message

type: string default: This value is already used.

タイプ: 文字列 デフォルト: この値はすでに使用されています。

The message that's displayed when this constraint fails. This message is by default mapped to the first field causing the violation. When using multiple fields in the constraint, the mapping can be specified via the errorPath property.

この制約が失敗したときに表示されるメッセージ。このメッセージは、デフォルトで、違反の原因となった最初のフィールドにマップされます。制約で複数のフィールドを使用する場合、マッピングは errorPath プロパティを介して指定できます。

Messages can include the {{ value }} placeholder to display a string representation of the invalid entity. If the entity doesn't define the __toString() method, the following generic value will be used: "Object of class __CLASS__ identified by <comma separated IDs>"

メッセージに {{ value }} プレースホルダーを含めて、無効なエンティティの文字列表現を表示できます。エンティティが __toString() メソッドを定義していない場合は、次の一般的な値が使用されます。

You can use the following parameters in this message:

このメッセージでは、次のパラメーターを使用できます。
Parameter Description
{{ value }} The current (invalid) value
{{ label }} Corresponding form field label

payload

type: mixed default: null

タイプ: 混合 デフォルト: null

This option can be used to attach arbitrary domain-specific data to a constraint. The configured payload is not used by the Validator component, but its processing is completely up to you.

このオプションは、任意のドメイン固有のデータを制約に添付するために使用できます。構成されたペイロードは Validator コンポーネントによって使用されませんが、その処理は完全にユーザー次第です。

For example, you may want to use several error levels to present failed constraints differently in the front-end depending on the severity of the error.

たとえば、いくつかのエラー レベルを使用して、エラーの重大度に応じて、失敗した制約をフロントエンドで異なる方法で提示することができます。

repositoryMethod

type: string default: findBy

タイプ: 文字列 デフォルト: findBy

The name of the repository method used to determine the uniqueness. If it's left blank, findBy() will be used. The method receives as its argument a fieldName => value associative array (where fieldName is each of the fields configured in the fields option). The method should return a countable PHP variable.

一意性を判断するために使用されるリポジトリ メソッドの名前。 leftblank の場合、findBy() が使用されます。このメソッドは、引数として afieldName => 値の連想配列を受け取ります (ここで、fieldName は fields オプションで構成された各フィールドです)。このメソッドは、カウント可能な PHP 変数を返す必要があります。