Laravel-如何解决规则请求验证错误
我在Laravel-5.8中有一个项目,它验证了: 目标\类型\ id、考核\标识\ id、员工\ id在使用规则请求的考核\目标中唯一 目标\类型\ id、评估\身份\ id、员工\ id是外键 模型 存储算法需求Laravel-如何解决规则请求验证错误,laravel,Laravel,我在Laravel-5.8中有一个项目,它验证了: 目标\类型\ id、考核\标识\ id、员工\ id在使用规则请求的考核\目标中唯一 目标\类型\ id、评估\身份\ id、员工\ id是外键 模型 存储算法需求 public function rules() { return [ 'goal_type_id' => [ 'required', Rule::unique('apprais
public function rules()
{
return [
'goal_type_id' => [
'required',
Rule::unique('appraisal_goals', 'goal_type_id', 'appraisal_identity_id', 'employee_id')
],
];
}
public function messages()
{
return [
'goal_type_id.required' => 'Please enter the Goal Type!',
'goal_type_id.unique' => 'Goal Type already exists. Please enter a unique Goal Type.!',
];
}
控制器
public function store(StoreAppraisalGoalRequest $request)
{
$userCompany = Auth::user()->company_id;
$employeeId = Auth::user()->employee_id;
$identities = DB::table('appraisal_identity')->select('id','appraisal_name')->where('company_id', $userCompany)->where('is_current', 1)->first();
try {
$goal = new AppraisalGoal();
$goal->goal_type_id = $request->goal_type_id;
$goal->appraisal_identity_id = $request->appraisal_identity_id;
$goal->employee_id = $employeeId;
$goal->is_active = 1;
$goal->save();
foreach ( $request->activity as $key => $activity){
$goaldetail = new AppraisalGoalDetail();
$goaldetail->kpi_description = $request->kpi_description[$key];
$goaldetail->appraisal_doc = $request->application_doc[$key];
$goaldetail->activity = $request->activity[$key];
$goaldetail->start_date = $startDate ->toDateTimeString();
$goaldetail->end_date = $endDate->toDateTimeString();
$goaldetail->save();
}
Session::flash('success', 'Appraisal Goal is created successfully');
return redirect()->route('appraisal.appraisal_goals.index');
} catch (Exception $exception) {
Session::flash('danger', 'Appraisal Goal creation failed!');
return redirect()->route('appraisal.appraisal_goals.index');
}
}
在“评估目标”表中,员工只能有一个与评估标识和员工标识相关的目标类型标识
员工a成功地做到了这一点。但当另一名员工登录并提交时,我出现以下错误:
目标类型已存在。请输入唯一的目标类型
请注意,这并不存在
如规则验证自定义消息所示:
我如何解决这个问题
谢谢。规则::unique()
将仅应用于'goal\u type\u id'
,但引用的是一个唯一列数组
如果希望确保它们在各自的表中是唯一的值,请执行以下操作:
public function rules()
{
return [
'goal_type_id' => 'required|unique:goal_types,id',
'employee_id' => 'required|unique:employees,id',
...
];
}
复合密钥验证 您需要的是复合密钥的验证(即,它们在组合中是唯一的)。这可以通过使用
where
约束来实现
'goal_type_id' => Rule::unique('goal_types')->where(function ($query) {
return $query
->where('employee_id', 1)
->where('appraisal_identity_id', 1);
})
你好像不明白。这三个字段就目标类型id而言是唯一的。也就是说,当输入目标类型id时,应用程序必须根据评估目标表中的评估标识id和员工id进行检查。正如我当时怀疑的那样,您希望检查复合键是否唯一。你对
目标类型\u id
的规则让我有点吃惊。我已经更新了我的答案,但我还没有机会测试它,但它应该为你指明了正确的方向!我现在如何进行更新。”目标\类型\ id'=>[“必需”,规则::唯一('评估\目标','目标\类型\ id','评估\身份\ id','员工\ id')->忽略($this->评估\目标)],
'goal_type_id' => Rule::unique('goal_types')->where(function ($query) {
return $query
->where('employee_id', 1)
->where('appraisal_identity_id', 1);
})