sql >> Base de Datos >  >> RDS >> Mysql

Cómo agregar una regla de validación de campos únicos combinados en Laravel 4

Podría escribir una regla de validación personalizada. La regla podría verse así:

'unique_multiple:table,field1,field2,field3,...,fieldN'

El código para eso se vería así:

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

Puede usar tantos campos como desee para la condición, solo asegúrese de que el valor pasado sea una matriz que contenga los valores de los campos en el mismo orden declarado en la regla de validación. Entonces, su código de validación se vería así:

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