Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So fügen Sie eine Validierungsregel für kombinierte eindeutige Felder in Laravel 4 hinzu

Sie könnten eine benutzerdefinierte Validierungsregel schreiben. Die Regel könnte etwa so aussehen:

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

Der Code dafür würde in etwa so aussehen:

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

Sie können beliebig viele Felder für die Bedingung verwenden, stellen Sie nur sicher, dass der übergebene Wert ein Array ist, das die Werte der Felder in derselben Reihenfolge enthält, wie sie in der Validierungsregel deklariert ist. Ihr Validierungscode würde also etwa so aussehen:

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