eastree / uniquewith-validator
针对组合唯一索引的 Laravel 自定义验证器
3.1.3
2018-04-26 09:59 UTC
Requires
- php: >=5.4.0
- illuminate/support: 5.*
- illuminate/validation: 5.*
Requires (Dev)
- bossa/phpspec2-expect: dev-phpspec-3.2
- phpspec/phpspec: ^3.2
README
此包包含 Laravel 的 validateUnique 规则的变体,允许验证多列 UNIQUE 索引。
旧版本文档
安装
通过 Composer 安装此包。在命令行
composer require felixkiss/uniquewith-validator
配置
将以下内容添加到你的 providers 数组中的 config/app.php
'providers' => [ // ... Felixkiss\UniqueWithValidator\ServiceProvider::class, ],
使用
像使用任何 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', ];
示例
假设你在数据库中有一个 users 表和类似的 User 模型
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; class CreateUsersTable 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 Eloquent { }
现在你可以使用以下方式验证给定的 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!'); });
你也可以指定一个要忽略的行 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', ];
许可
MIT