Всем привет!
Мне необходимо в базу ложить уникальные email. Так вот, почитал документацию и настроил сущность следующим образом:
/**
* @ORM\Table(name="subscribe")
* @ORM\Entity(repositoryClass="App\PalermoBundle\Repository\SubscribeRepository")
* @UniqueEntity("email")
*/
class Subscribe
{
/**
* var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* var string
* @ORM\Column(name="email", type="string", length=255, unique = true)
*/
private $email;
/**
* var string
* @ORM\Column(name="male", type="string", length=10)
*/
private $male;
}
На уровне базы существующий email в базу не падает, но при сохранении $em->flush() выбрасывается исключение из-за того что данные уже есть.
Как я могу сделать проверку перед сохранением?
Нашел на эту тему FAQ
Doctrine не проверяет не добавляете ли вы в базу данных сущности с уже дублирующимися ключами PRIMARY, или не добавляете ли вы дважды в коллекцию одну и ту же сущность. Если есть какие-то опасения на этот счет, всегда можно сделать соответствующую проверку перед вызовом $em->flush().
В Symfony2 для этого существует соответствующий компонент под названием Unique Entity Validator.
Проверить содержит ли коллекция заданную сущность можно с помощью метода $collection->contains($entity). Для коллекции с параметром FETCH равным LAZY этот метод просто инициализирует коллекцию, однако если FETCH равен EXTRA_LAZY, то для проверки принадлежности Doctrine выполнит SQL-запросы.
Только вот никак не разберусь как это применить можно. Как получить объект $collection? Ребята помогите пожалуйста