Правило unique
Правило unique используется для проверки уникальности значения поля в таблице базы данных. Оно гарантирует, что введённое пользователем значение не дублируется с существующими записями. Первым параметром передаётся имя таблицы, вторым - имя столбца. Если столбец не указан, используется имя проверяемого поля.
Синтаксис
<?php
'field' => 'unique:table,column'
?>
Где:
- field - имя поля формы;
- table - имя таблицы в базе данных;
- column - имя столбца (опционально).
Пример
Проверим, что введённый email не существует в таблице users:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'email' => 'required|unique:users',
]);
return response()->json(['message' => 'User created']);
}
}
?>
Если пользователь введёт email 'user@example.com', который уже существует, валидация не пройдёт.
Пример
Проверим уникальность имени пользователя в столбце username таблицы users:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class ProfileController extends Controller
{
public function update(Request $request)
{
$validated = $request->validate([
'username' => 'required|unique:users,username',
]);
return redirect()->back()->with('success', 'Profile updated');
}
}
?>
Результат выполнения кода при успешной валидации:
"Profile updated"
Игнорирование текущей записи
При обновлении данных часто нужно игнорировать текущую запись, чтобы валидация не срабатывала на собственное значение. Для этого используется дополнительный параметр:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$validated = $request->validate([
'email' => 'required|unique:users,email,' . $id,
]);
return response()->json(['message' => 'User updated']);
}
}
?>
Пример
Используем правило с дополнительными условиями через метод Rule::unique:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use IlluminateValidationRule;
class UserController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'email' => [
'required',
Rule::unique('users')->where(function ($query) {
return $query->where('active', true);
}),
],
]);
return response()->json(['message' => 'User created']);
}
}
?>
В этом примере уникальность проверяется только среди активных пользователей.
Смотрите также
-
правило
required,
которое проверяет наличие значения -
правило
email,
которое проверяет корректность email-адреса -
правило
exists,
которое проверяет существование значения в таблице -
метод
Rule::unique,
который предоставляет расширенный синтаксис проверки