我有一个表单,其中有一个字段“位置”,并且我使用 UniqueEntity 使该字段唯一。但我目前面临的问题是,如果用户在同一位置键入但仅更改输入的大小写,则表单将提交并在数据库中添加新输入。这不是我想要的,它应该显示一条错误消息,表明这个地方已经被使用,他们需要输入不同的消息,无论它是大写还是小写。
我尝试过制作自己的自定义约束,但没有成功。
您可以保留唯一约束,但使用参数“repositoryMethod”来使用您自己的不区分大小写的查询。
来自 UniqueEntity 文档:
用于确定唯一性的存储库方法的名称。如果 留空,将使用 findBy() 。该方法接收作为其 参数 a fieldName => 值关联数组(其中 fieldName 是 fields 选项中配置的每个字段)。该方法应该 返回一个可数 PHP 变量。
因此,在您的存储库中创建一个自定义方法,该方法在您的字段上使用 UPPER 或 LOWER 函数进行搜索,并在您的约束中使用它:
#[UniqueEntity(fields: ['place'], repositoryMethod: 'caseInsensitiveFindBy')]