php - Laravel 5.4 中的唯一验证无法按 where() 语句的预期工作
问题描述
在此表中,有 3 个主要参数:
"is_active" (BOOLEAN)
"position" (INT)
"id"
这是唯一规则
'position' => [
'required_if:is_active,true|integer|min:1',
Rule::unique('tablename')->where(function($query) { $query->where('is_active', '=', 'true')->where('id', '!=', $this->id); }),
],
此规则应该确保参数在已设置为position
的数据中唯一。当前的问题是该规则已被忽略,并且我能够保存更新/编辑功能,即使按理说应该没有通过此验证。is_active
true
id=1,位置=1,is_active=true
id=2,位置=2,is_active=true
当我将位置从 2 更改为 1 时,如上所示,它应该显示一条错误消息,而不是成功。但事实并非如此。
编辑:$this
属性
ParameterBag {#1862
#parameters: array:13 [
"is_active" => "1"
"order" => "2"
]
}
注意:这是在 Laravel 5.4 中,请不要建议我升级到 Laravel 8 等。
解决方案
我假设,$this->id
您使用的是id
参数中可用的。
所以,你可以通过两种方式实现
- 使用唯一的验证规则,例如... https://laravel.com/docs/5.4/validation#rule-unique
'position' => [
'required_if:is_active,true|integer|min:1',
'unique:tablename,columnname,yourIDvalue',
],
- 你可以
use
在函数中使用,像这样......
'position' => [
'required_if:is_active,true|integer|min:1',
Rule::unique('tablename')->where(function($query) use ($yourIDvalue) {
$query->where('is_active', '=', 'true')->where('id', '!=', $yourIDvalue);
}),
],
推荐阅读
- javascript - 碰撞检测html5画布
- stata - 从字符串响应中删除特定字符
- php - 在php中获取2个日期之间的信息
- substrate - 对 IterableStorageMap 进行排序
- azure - 为容器中的所有 blob 设置生命周期管理规则
- python - 如何使用opencv拼接多个图像?
- django - Django rest 框架:远程用户在中间件中不可用 - 仅在视图中
- node.js - 将检索到的数据从 MongoDB 插入到 vue 脚本行数组中的数组中
- java - 如何在 5 秒后处理 jframe 并打开下一个 jframe
- sqlite - SQLite - 每天将 .csv 数据导入数据库