2015-12-15 88 views
1

我有實體用戶和三個獨特的字段,並使用這個@UniqueEntity,但我不知道如何在消息可見確切已經在數據庫中的字段?我想,也許像斷言註釋Symfony Doctrine UniqueEntity repositoryMethod

* @Assert\Type(
*  type="array", 
*  message="The value {{ value }} is not a valid {{ type }}." 
*) 

但不起作用

我的實體:

/** 
* Users. 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\UsersRepository") 
* @ExclusionPolicy("all") 
* @UniqueEntity(
*  fields={"email", "telephone", "skype"}, 
*  errorPath="entity", 
*  message="This email, telephone or skype is already." 
*) 
*/ 
class Users implements UserInterface 
{ 
use Timestampable; 
    /** 
* @var string 
* 
* @ORM\Column(name="email", type="string", length=255, unique=true, nullable=true) 
* @Expose() 
* @Assert\Length(min=3, max=255) 
* @Assert\NotBlank() 
* @Assert\Email() 
*/ 
protected $email; 

/** 
* @var string 
* 
* @ORM\Column(name="skype", type="string", length=255, unique=true, nullable=true) 
* @Assert\Length(min=3, max=255) 
* @Expose() 
*/ 
protected $skype; 

/** 
* @var string 
* 
* @ORM\Column(name="telephone", type="string", length=255, unique=true, nullable=true) 
* @Assert\Length(min=3, max=255) 
* @Expose() 
*/ 
protected $telephone; 

回答

1

你必須配置具有獨特的元組的約束:外地的電子郵件電話相結合的價值和Skype是獨一無二的。

doc

這個必需的選項字段(或字段列表)在此 實體應該是唯一的。例如,如果您在單個UniqueEntity約束中同時指定了電子郵件地址 和名稱字段,則 會強制該組合值是唯一的(例如,兩個用戶可以使用 具有相同的電子郵件,只要他們沒有同名)。

如果您需要要求兩個字段分別唯一(例如,唯一的電子郵件地址和唯一的用戶名),則使用兩個UniqueEntity條目 ,每個條目都有一個字段。

所以你需要指定三個不同的唯一約束,因爲例如:

/** 
* Users. 
* 
* @ORM\Table(name="users") 
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\UsersRepository") 
* @ExclusionPolicy("all") 
* @UniqueEntity(
*  fields="email", 
*  errorPath="entity", 
*  message="This email is already in use." 
* @UniqueEntity(
*  fields="telephone", 
*  errorPath="entity", 
*  message="This telephone is already in use." 
* @UniqueEntity(
*  fields="skype", 
*  errorPath="entity", 
*  message="This skype account is already in use." 
*) 
*/ 
class Users implements UserInterface 

希望這有助於

+1

感謝,做工精細 –