Welcome to the incredibly popular Easy Laravel 5 companion blog. To celebrate the new edition's release (updated for Laravel 5.5!) use the discount code easteregg to receive 20% off the book or book/video package! » Buy the book
When building web applications there are plenty of situations in which you'll want to make sure a database table field contains only unique values. For instance if you're creating a product catalog then logically each product's SKU should be unique. Laravel's Validation class has long supported a unique
validator for ensuring a given field is unique, but the introduction of form requests in Laravel 5 has caused some confusion in terms of how form request rules
method can be used in conjunction with the unique
validation rule when editing a record, so I thought I'd put together a quick example demonstrating how the two are used together.
Suppose you were validating a product management form used in conjunction with a product catalog manager. Each product consists of three required fields: a product name, SKU, and price. Further, each product SKU must be unique. While it's enough to simply specify required
when validating a required field, the unique
validator is a tad more involved because if you're editing a product (for instance, changing the price), and don't additionally change the SKU, Laravel will generate an error informing you that the SKU already exists. Indeed it does; it's associated with the very record you're trying to edit! To resolve this dilemma, you additionally need to identify three other pieces of information as presented in the following rules
method:
public function rules()
{
return [
'name' => 'required',
'sku' => 'required|unique:products,sku,' . $this->get('id'),
'price' => 'required|numeric'
];
}
These three additional pieces of information include:
products
.sku
.id
passed along with the rest of the form information. This id
is the record's primary key. When specified, the unique
validator will examine all other records, but ignore the record associated with this ID.With this additional information in place, you're ready to begin using form requests in conjunction with the unique
validator!