Laravel, уникальные столбцы

#laravel #validation #unique #rules

#laravel #валидация #уникальный #Правила #проверка

Вопрос:

Мне нужно проверить, существует ли поле уже, выдает ошибку, но с этим кодом ошибки не возникают

Laravel 7

 table: departamento
column: id int incremental
column: departamento varchar(150)
column: idPais       int
  

метод сохранения

 $this->validate($request, ['departamento' => Rule::unique('departamento','idPais')->where('departamento',$request->depto)->where('idPais',$request->pais)]);
  

Попробуйте и с этим

  $rules = [
'depto' => [Rule::unique('departamento')->where(function ($query) use ($request) {
    return $query->where('departamento','=', $request->depto)->where('idPais','=', $request->pais);
}),]
];
 $this->validate($request,$rules);
  

с помощью этого кода выдается эта ошибка

  $rules = [
'depto' => [Rule::unique('departamento')->where(function ($query) use ($request) {
    return $query->where('departamento','=', $request->depto)->where('idPais','=', $request->pais);
}),]
];
$this->validate($request,$rules);
  

ошибка

Спасибо!!!

Редактировать:

Мой плохой, мне нужно проверить два поля, departamento и idPais, спасибо.

Комментарии:

1. Так что в принципе departmento должно быть уникальным? Как idPais связан с этим?

Ответ №1:

Это происходит из-за вашего имени поля. Уникальное правило попытается найти запись, для имени столбца которой задано значение запроса (в вашем случае, depto но ваше имя столбца departamento ). Когда вы настраиваете запрос, вы не переопределяете его, вы добавляете поверх этого поведения по умолчанию. Из документов laravel:

По умолчанию уникальное правило проверяет уникальность столбца, соответствующего имени проверяемого атрибута. Однако вы можете передать другое имя столбца в качестве второго аргумента уникального метода:

Имея это в виду, вы могли бы либо изменить уникальное правило, чтобы установить для столбца значение departamento , а не depto , как указано ниже, либо изменить departamento атрибут запроса на отправку вместо depto :

 $rules = [
'depto' => [Rule::unique('departamento', 'departamento')->where(function ($query) use ($request) {
    return $query->where('idPais','=', $request->pais);
}),]
];