This package contains a variant of the validateUnique
rule for Laravel 4, that allows for validation of multi-column UNIQUE indexes.
Install the package through Composer.
In your composer.json
file:
{
"require": {
"laravel/framework": "4.0.*",
// ...
"felixkiss/uniquewith-validator": "1.0.*"
}
}
Run composer install
or composer update
to install the package.
Add the following to your providers
array in config/app.php
:
'providers' => array(
// ...
'Felixkiss\UniqueWithValidator\UniqueWithValidatorServiceProvider',
),
Use it like any Validator
rule:
$rules = array(
'<field1>' => 'unique_with:<table>,<field2>[,<field3>,...,<ignore_rowid>]',
);
See the Validation documentation of Laravel 4.
If your input field names are different from the corresponding database columns, you can specify the column names explicitly.
e.g. your input contains a field 'last_name', but the column in your database is called 'sur_name':
$rules = array(
'first_name' => 'unique_with:users, middle_name, last_name = sur_name',
);
Pretend you have a users
table in your database plus User
model like this:
<?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(array('first_name', 'last_name'));
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('users');
}
}
<?php
class User extends Eloquent { }
Now you can validate a given first_name
, last_name
combination with something like this:
Route::post('test', function() {
$rules = array(
'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!');
});
You can also specify a row id to ignore (useful to solve unique constraint when updating)
This will ignore row with id 2
$rules = array(
'first_name' => 'required|unique_with:users,last_name,2',
'last_name' => 'required',
);
MIT