我在使用多个字段验证UniqueEntity
时遇到问题。
我有以下代码:
/**
* @ORM\Entity()
* @ORM\Table(name="app_languages", uniqueConstraints={@ORM\UniqueConstraint(name="IDX_LANGUAGE_CONSTRAINT", columns={"language_id", "app_id"})})
*
* @UniqueEntity(fields={"languages", "app"})
*/
class AppLanguages extends AbstractEntity
当我尝试发布相同的language_id和app_id时,我会收到PDOException > PDOException > UniqueConstraintViolationException
我检查了symfony的documentation我也检查了这个答案here但它没有按预期工作。
在名称空间Symfony\Bridge\Doctrine\Validator\Constraints
下还有一个验证器可以完成,但这仍然无效...
答案 0 :(得分:0)
多件事:
首先,我可以看到你所展示的内容中的潜在拼写错误问题,你在引用“language_id”(单数)列的表约束注释中,而在你的UniqueEntity注释中,你引用了fiel“languages” (复数),所以可能会尝试仔细检查您的字段/列定义。
您尝试创建约束的两种方法有不同的用途:
@ORM\UniqueConstraint
通过添加SQL UNIQUE constraint来生成数据库中的架构更改。这样做会强制您的数据库引擎检查所述表中的每个条目并生成错误(例如:MySQL的“错误#1062”),PDO可以将其转发到PHP输出中。
@UniqueEntity
另一方面,UniqueEntity旨在通过针对您的数据库触发SELECT语句并检查是否有任何类似于提交的值的结果来验证您的PHP实体(为示例执行$ form-> isValid())
重点是,仔细阅读并了解您正在获取的异常将帮助您了解哪个约束确切地导致问题并找到原因(这是否已经存在于基础中的数据?)。
此外,根据您的需要,您可能不需要包含2个约束,并且只使用@UniqueEntity或@UniqueConstraint。
编辑:
您可以尝试使用repositorymethod选项通过创建自己的存储库方法来强制执行用于验证的请求。
希望这有帮助