Symfony4: ограничение UniqueEntity не работает для поля GUID (связанный объект) - PullRequest
0 голосов
/ 22 октября 2019

обн .: Обратите внимание: уникальная проверка работала правильно, пока я не изменил связанный тип PK User::$id с целое число на guid .

У меня есть сущность UserWatchlist, которая относится к User (многие-к-одному). Он имеет сложное уникальное ограничение на 2 поля user и direction:

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserWatchlistRepository")
 * @UniqueEntity(
 *     fields={"user", "direction"},
 *     errorPath="direction",
 *     message="User already has this direction"
 * )
 */
 class UserWatchlist
 {

В то время как User::$id PK был целым числом

Class User

  /**
   * @ORM\Id()
   * @ORM\GeneratedValue()
   * @ORM\Column(type="integer")
   */
  private $id;

проверка уникальности работала нормально.

Но так как я обновил его до типа guid:

Class User

  /**
   * @ORM\Id()
   * @ORM\GeneratedValue(strategy="UUID")
   * @ORM\Column(type="guid")
   */
  private $id;

, эта проверка игнорируется и просто переходит к проверке индекса на уровне базы данных (если есть).

Все индексы и внешние ключивсе в порядке.

Это ошибка или я что-то не так сделал, есть идеи?

1 Ответ

0 голосов
/ 22 октября 2019

После изменения аннотаций вам нужно создать миграцию и изменить схему в базе данных:

php bin/console make:migration
php bin/console doctrine:migrations:migrate

Подробнее в Symfony документы о доктрине и базе данных .

FYI Существует инструмент для проверки синхронизации аннотаций сопоставления с базой данных:

php bin/console doctrine:schema:validate
...