Laravel - Как устранить ошибку проверки запроса правила - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть этот проект в Laravel -5.8, который проверяет:

goal_type_id, appraisal_identity_id, employee_id как уникальный в appraisal_goals с использованием запроса правила.

goal_type_id, appraisal_identity_id, employee_id являются внешними ключами

Модель

protected $fillable = [
              'id',
              'goal_type_id',
              'appraisal_identity_id',
              'employee_id',
              'company_id',
          ];

StoreAppraisalGoalReques

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');
    }
}

У сотрудника может быть только один target_type_id, относящийся к appraisal_identity_id и employee_id в оценочных оценках Таблица.

Сотрудник успешно сделал это. Но когда другой сотрудник входит в систему и отправляет сообщение, я получаю эту ошибку:

Тип цели уже существует. Пожалуйста, введите уникальный тип цели.!

Обратите внимание, что этого не существует.

, как показано в пользовательском сообщении проверки правил:

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

Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2020

Rule::unique() будет применяться только к 'goal_type_id', но ссылается на массив ваших уникальных столбцов.

Если вы хотите убедиться, что они являются уникальными значениями в своих соответствующих таблицах, сделайте что-то подобное :

public function rules()
{
    return [
        'goal_type_id' => 'required|unique:goal_types,id',
        'employee_id' => 'required|unique:employees,id',
        ...
    ];
}

Проверка составного ключа laravel Документы

Что вы ищете, так это проверка составного ключа (т.е. они уникальны в сочетании). Это может быть достигнуто с помощью where ограничений

'goal_type_id' => Rule::unique('goal_types')->where(function ($query) {
    return $query
        ->where('employee_id', 1)
        ->where('appraisal_identity_id', 1);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...