Laravel, одна из самых популярных платформ PHP, предоставляет мощную систему проверки, которая позволяет разработчикам определять собственные правила проверки. В этой статье блога мы рассмотрим, как создать собственное правило «существует» в Laravel, где проверка существования выполняется для столбца базы данных, отличного от первичного ключа по умолчанию. Мы рассмотрим несколько методов, используя разговорный язык и примеры кода, которые помогут вам эффективно реализовать это специальное правило.
Метод 1: расширение класса Validator
Первый метод предполагает расширение класса Validator Laravel для определения нашего специального правила. Таким образом, мы можем переопределить поведение правила «exists» по умолчанию и указать другой столбец для проверки существования.
use Illuminate\Validation\Validator;
Validator::extend('exists_with_different_id', function ($attribute, $value, $parameters, $validator) {
$table = $parameters[0];
$column = $parameters[1];
$idColumn = $parameters[2];
$idValue = $parameters[3];
return \DB::table($table)
->where($column, $value)
->where($idColumn, '<>', $idValue)
->exists();
});
Метод 2: использование объектов правил
Laravel предоставляет удобный способ определения пользовательских правил проверки с использованием объектов правил. Этот метод позволяет нам инкапсулировать логику проверки внутри класса для лучшей возможности повторного использования.
use Illuminate\Validation\Rule;
$rule = Rule::exists('table')->where(function ($query) use ($column, $idColumn, $idValue) {
$query->where($column, $value)
->where($idColumn, '<>', $idValue);
});
$validator = Validator::make($data, [
'column_name' => $rule,
]);
Метод 3. Создание пользовательского класса правил проверки
Для более сложных сценариев создание пользовательского класса правил проверки может обеспечить более чистый и организованный подход. Давайте создадим класс правил под названием ExistsWithDifferentIdRule:
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class ExistsWithDifferentIdRule implements Rule
{
protected $table;
protected $column;
protected $idColumn;
protected $idValue;
public function __construct($table, $column, $idColumn, $idValue)
{
$this->table = $table;
$this->column = $column;
$this->idColumn = $idColumn;
$this->idValue = $idValue;
}
public function passes($attribute, $value)
{
return \DB::table($this->table)
->where($this->column, $value)
->where($this->idColumn, '<>', $this->idValue)
->exists();
}
public function message()
{
return 'The selected :attribute does not exist with the provided ID.';
}
}
$validator = Validator::make($data, [
'column_name' => ['required', new ExistsWithDifferentIdRule('table_name', 'column_name', 'id_column_name', $id_value)],
]);
.
В этой статье мы рассмотрели различные методы создания специального правила «существует» в Laravel, позволяющего нам выполнять проверки существования столбца, отличного от первичного ключа по умолчанию. Мы рассмотрели расширение класса Validator, использование объектов Rule и создание собственного класса правил проверки. Эти методы обеспечивают гибкость и возможность повторного использования, позволяя вам эффективно обрабатывать сложные сценарии проверки в ваших приложениях Laravel.
Не забудьте выбрать метод, который лучше всего соответствует вашим требованиям и стилю кодирования. Приятного программирования с Laravel!