Vous pouvez écrire une règle de validation personnalisée. La règle pourrait ressembler à ceci :
'unique_multiple:table,field1,field2,field3,...,fieldN'
Le code pour cela ressemblerait à ceci :
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);
});
Vous pouvez utiliser autant de champs que vous le souhaitez pour la condition, assurez-vous simplement que la valeur transmise est un tableau contenant les valeurs des champs dans le même ordre que celui déclaré dans la règle de validation. Votre code de validation ressemblerait donc à ceci :
$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'
)
);