Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment ajouter une règle de validateur de champs uniques combinés dans Laravel 4

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'
    )
);