Bạn có thể viết quy tắc trình xác thực tùy chỉnh. Quy tắc có thể trông giống như sau:
'unique_multiple:table,field1,field2,field3,...,fieldN'
Mã cho điều đó sẽ trông giống như sau:
Validator::extend('unique_multiple', function ($attribute, $value, $parameters)
{
// Get table name from first parameter
$table = array_shift($parameters);
// Build the query
$query = DB::table($table);
// Add the field conditions
foreach ($parameters as $i => $field)
$query->where($field, $value[$i]);
// Validation result will be false if any rows match the combination
return ($query->count() == 0);
});
Bạn có thể sử dụng bao nhiêu trường tùy thích cho điều kiện, chỉ cần đảm bảo giá trị được truyền vào là một mảng chứa các giá trị của các trường theo thứ tự như đã khai báo trong quy tắc xác thực. Vì vậy, mã trình xác thực của bạn sẽ trông giống như sau:
$validator = Validator::make(
// Validator data goes here
array(
'unique_fields' => array('examdate_value', 'batch_value', 'chapter_value')
),
// Validator rules go here
array(
'unique_fields' => 'unique_multiple:exams,examdate,batch,chapter'
)
);