reinbier/laravel-unique-with

Laravel的唯一性验证规则

v1.1.0 2024-04-09 13:05 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

本包包含Laravel validateUnique规则的变体,允许验证多列UNIQUE索引。

请注意

本包旨在继续开发由Felix Kiss编写的uniquewith-validator包,并使其与Laravel框架的最新版本兼容(从Laravel 9开始)。对于旧版本的框架,请使用上述包。

安装

您可以通过composer安装此包

composer require reinbier/laravel-unique-with

用法

像任何Validator规则一样使用它

$rules = [
    '<field1>' => 'unique_with:<table>,<field2>[,<field3>,...,<ignore_rowid>]',
];

查看Laravel的验证文档

指定不同的数据库列名

如果您的输入字段名与相应的数据库列名不同,您可以显式指定列名。

例如,您的输入包含一个字段'last_name',但数据库中的列名是'sur_name'

$rules = [
    'first_name' => 'unique_with:users, middle_name, last_name = sur_name',
];

忽略现有行(在更新时很有用)

您还可以指定要忽略的行ID(在更新时解决唯一约束很有用)

这将忽略ID为2的行

$rules = [
    'first_name' => 'required|unique_with:users,last_name,2',
    'last_name' => 'required',
];

要指定自定义的ID列名,按如下方式传递

$rules = [
    'first_name' => 'required|unique_with:users,last_name,2 = custom_id_column',
    'last_name' => 'required',
];

如果您的ID不是数字,您可以告诉验证器

$rules = [
    'first_name' => 'required|unique_with:users,last_name,ignore:abc123',
    'last_name' => 'required',
];

添加附加子句(例如,当使用软删除时)

您还可以设置附加子句。例如,如果您的模型使用软删除,则可以使用以下代码选择所有标记为已删除的现有行

$rules = [
    'first_name' => 'required|unique_with:users,last_name,deleted_at,2 = custom_id_column',
    'last_name' => 'required',
];

软删除注意事项

如果在表单请求类中执行验证,则跳过字段deleted_at,因为它没有在请求中发送。为了解决这个问题,请将'deleted_at' => null添加到请求类中的验证参数中,例如。

protected function validationData()
{
    return array_merge($this->request->all(), [
        'deleted_at' => null
    ]);
}

指定要使用的特定数据库连接

如果我们有一个名为some-database的连接,我们可以强制使用此连接(而不是默认连接),如下所示

$rules = [
    'first_name' => 'unique_with:some-database.users, middle_name, last_name',
];

示例

假设您在数据库中有一个users表和一个类似这样的User模型

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

return new class extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table) {
            $table->increments('id');

            $table->timestamps();

            $table->string('first_name');
            $table->string('last_name');

            $table->unique(['first_name', 'last_name']);
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}
<?php

class User extends Model { }

现在您可以使用类似以下方式验证给定的first_namelast_name组合

Route::post('test', function() {
    $rules = [
        'first_name' => 'required|unique_with:users,last_name',
        'last_name' => 'required',
    ];

    $validator = Validator::make(Input::all(), $rules);

    if($validator->fails()) {
        return Redirect::back()->withErrors($validator);
    }

    $user = new User;
    $user->first_name = Input::get('first_name');
    $user->last_name = Input::get('last_name');
    $user->save();

    return Redirect::home()->with('success', 'User created!');
});

测试

composer test

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

致谢

此包中的代码基于来自uniquewith-validator的原代码,由Felix Kiss提供。

许可证

麻省理工学院许可证(MIT)。更多信息请参阅许可证文件