Метод exists
Метод exists класса Rule предназначен для проверки существования значения в определённой колонке таблицы базы данных. Он часто используется в правилах валидации форм, чтобы убедиться, что переданное значение соответствует существующей записи в связанной таблице. Первым параметром передаётся имя таблицы, вторым - имя колонки (по умолчанию используется имя поля, которое валидируется).
Синтаксис
<?php
use Illuminate\Validation\Rule;
Rule::exists($table, $column = null);
?>
Пример
Проверим, что переданный 'category_id' существует в таблице 'categories':
<?php
namespace App\Http\Controllers;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class CategoryController extends Controller
{
public function store(Request $request)
{
$request->validate([
'category_id' => [
'required',
Rule::exists('categories', 'id'),
],
]);
$res = Category::find($request->category_id);
echo $res->name;
}
}
?>
Результат выполнения кода при корректном 'category_id':
"Electronics"
Пример
Проверим, что переданный 'email' существует в таблице 'users':
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class UserController extends Controller
{
public function update(Request $request)
{
$request->validate([
'email' => [
'required',
'email',
Rule::exists('users', 'email'),
],
]);
$res = User::where('email', $request->email)->first();
echo $res->name;
}
}
?>
Результат выполнения кода при корректном 'email':
"John Doe"
Пример
Используем метод exists с дополнительным условием для проверки существования активной категории:
<?php
namespace App\Http\Controllers;
use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
class CategoryController extends Controller
{
public function store(Request $request)
{
$request->validate([
'category_id' => [
'required',
Rule::exists('categories', 'id')->where(function ($query) {
$query->where('active', true);
}),
],
]);
$res = Category::find($request->category_id);
echo $res->name;
}
}
?>
Результат выполнения кода при корректном 'category_id' с 'active' равным true:
"Books"