Laravel - Уникальные правила запроса позволяют дублировать - PullRequest
2 голосов
/ 20 марта 2020

В Laravel -5.8 Я применил Правила запроса для нескольких полей, как показано ниже:

public function rules() 
{
    return [
        'goal_type_id'  => [
            'required',
            Rule::unique('appraisal_goals')->where(function ($query) {
                return $query
                    ->where('employee_id', 1)
                    ->where('appraisal_identity_id', 1);
                })
        ],                  
        'appraisal_doc'  => 'nullable|mimes:doc,docx,xls,xlsx,ppt,pptx,pdf,jpg,jpeg,bmp,png,|max:5000',
        'weighted_score' => 'required|numeric|min:0|max:500',            
    ];
} 

Это mysql запрос:

ALTER TABLE appraisal_goals
ADD CONSTRAINT appraisal_goals_uniq1 UNIQUE KEY(goal_type_id,appraisal_identity_id,employee_id);

Это предназначено для создания , Из кода комбинация goal_type_id, employee_id и appraisal_identity_id является уникальной.

Когда я нажимаю на "Отправить" в Create Blade, он разрешает дублирование.

  1. Как мне решить эту проблему?

  2. Также как мне написать один для обновления?

Обратите внимание, что мой маршрут appraisal_goal

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 марта 2020

Попробуйте этот код для обновления

public function rules() 
{
    $appraisal_goal_id = 'take your appraisal_goals id here from request';
    return [
        'goal_type_id'   => [
            'required',
            Rule::unique('appraisal_goals')->ignore($appraisal_goal_id, 'id')->where(function ($query) {
                return $query
                    ->where('employee_id', 1)
                    ->where('appraisal_identity_id', 1);
            })
        ],
        'appraisal_doc'  => 'nullable|mimes:doc,docx,xls,xlsx,ppt,pptx,pdf,jpg,jpeg,bmp,png,|max:5000',
        'weighted_score' => 'required|numeric|min:0|max:500',          
 ];
} 
0 голосов
/ 20 марта 2020

Попробуйте это 'goal_type_id' => 'required|unique:table_name,filed_name'

public function rules() 
{
    return [
        'goal_type_id'   => [
            'required',
            Rule::unique('appraisal_goals')->where(function ($query) {
                return $query
                    ->where('employee_id', 1)
                    ->where('appraisal_identity_id', 1);
            })
        ],                  
        'appraisal_doc'  => 'nullable|mimes:doc,docx,xls,xlsx,ppt,pptx,pdf,jpg,jpeg,bmp,png,|max:5000',
        'weighted_score' => 'required|numeric|min:0|max:500',            
    ];
}
...