reinbier / laravel-unique-with
Laravel的唯一性验证规则
Requires
- php: ^8.0
- illuminate/contracts: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
- illuminate/validation: ^9.0|^10.0|^11.0
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.0
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
This package is auto-updated.
Last update: 2024-09-09 14:03:54 UTC
README
本包包含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_name
和last_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)。更多信息请参阅许可证文件。