Метод unique
Метод unique класса Rule применяется для валидации уникальности значения в указанной таблице базы данных. Первым параметром передаётся имя таблицы, вторым - имя колонки (по умолчанию используется имя проверяемого поля). Метод возвращает объект правила, который можно использовать в массиве правил валидации.
Синтаксис
<?php
use Illuminate\Validation\Rule;
Rule::unique($table, $column);
?>
Пример
Давайте проверим, что значение поля 'email' уникально в таблице 'users':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'email' => ['required', 'email', Rule::unique('users')],
]);
// Saving user...
}
}
?>
Результат выполнения кода при попытке создать пользователя с уже существующим email:
"The email has already been taken."
Пример
Давайте проверим уникальность поля 'username' в таблице 'users', явно указав имя колонки:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'username' => ['required', 'string', Rule::unique('users', 'username')],
]);
// Saving user...
}
}
?>
Пример
Давайте проверим уникальность поля 'slug' при обновлении записи, игнорируя текущую запись:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use App\Models\Post;
class PostController extends Controller
{
public function update(Request $request, Post $post)
{
$request->validate([
'slug' => ['required', 'string', Rule::unique('posts')->ignore($post->id)],
]);
// Updating post...
}
}
?>
Пример
Давайте проверим уникальность поля 'email' с дополнительным условием для колонки 'account_id':
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function store(Request $request)
{
$request->validate([
'email' => [
'required',
'email',
Rule::unique('users')->where(function ($query) use ($request) {
return $query->where('account_id', $request->account_id);
}),
],
]);
// Saving user...
}
}
?>
Пример
Давайте проверим уникальность поля 'phone' при обновлении, игнорируя запись с указанным id и колонкой:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function update(Request $request, $id)
{
$request->validate([
'phone' => [
'required',
'string',
Rule::unique('users', 'phone')->ignore($id, 'user_id'),
],
]);
// Updating user...
}
}
?>