基于两个字段的唯一表单验证
unique form validation based on two fields
我正在为名为 services
的 table 创建一条新记录,包括数据库中的一些字段(name
、department_id
、description
)。我需要将两个字段对组合在一起(name
和 department_id
)。我如何验证它以创建和更新函数?
在服务请求中:
return [
'params.name' => 'required|unique:services,name and depatment_id',
];
在服务模型中:
public function department()
{
return $this->belongsTo(Department::class);
}
在部门模型中:
public function services()
{
return $this->hasMany(Service::class);
}
在路线中:
Route::apiResource('/services', ServiceController::class)->names([
'store' => 'services_store',
'update' => 'services_update',
]);
例如:
某部门有服务时报错!
如果有name = service1
和department_id = 1
的记录,用户不能再次创建name
和department_id
的相同记录组合!用户允许使用 (name = service1
和 department_id = another_number
) 或 (department_id = 1
和 name = another_name
) 创建服务,但使用 (name = service1
和 department_id = 1
) 不允许
您可以这样使用 unique
规则:
return [
'params.name' => [
'required',
Rule::unique('services', 'name')
->ignore($this->service)
->where('department_id', $this->input('params.department_id'))
],
];
在这里你告诉 Laravel 检查 services
table 中是否没有现有记录 $this->input('params.name')
作为 name
和 $this->input('params.department_id')
作为 department_id
.
这里的 ->ignore($this->service)
是为了确保我们忽略当前服务(如果我们正在更新),所以它不会在验证期间“找到自己”。
$this->service
将是您正在更新的当前实例(如果您正确设置了路由和控制器,这是另一个主题)。
我正在为名为 services
的 table 创建一条新记录,包括数据库中的一些字段(name
、department_id
、description
)。我需要将两个字段对组合在一起(name
和 department_id
)。我如何验证它以创建和更新函数?
在服务请求中:
return [
'params.name' => 'required|unique:services,name and depatment_id',
];
在服务模型中:
public function department()
{
return $this->belongsTo(Department::class);
}
在部门模型中:
public function services()
{
return $this->hasMany(Service::class);
}
在路线中:
Route::apiResource('/services', ServiceController::class)->names([
'store' => 'services_store',
'update' => 'services_update',
]);
例如:
某部门有服务时报错!
如果有name = service1
和department_id = 1
的记录,用户不能再次创建name
和department_id
的相同记录组合!用户允许使用 (name = service1
和 department_id = another_number
) 或 (department_id = 1
和 name = another_name
) 创建服务,但使用 (name = service1
和 department_id = 1
) 不允许
您可以这样使用 unique
规则:
return [
'params.name' => [
'required',
Rule::unique('services', 'name')
->ignore($this->service)
->where('department_id', $this->input('params.department_id'))
],
];
在这里你告诉 Laravel 检查 services
table 中是否没有现有记录 $this->input('params.name')
作为 name
和 $this->input('params.department_id')
作为 department_id
.
这里的 ->ignore($this->service)
是为了确保我们忽略当前服务(如果我们正在更新),所以它不会在验证期间“找到自己”。
$this->service
将是您正在更新的当前实例(如果您正确设置了路由和控制器,这是另一个主题)。