web-dev-qa-db-fra.com

Laravel la validation existe là où PAS

Sur la base des documentations . Les existants peuvent avoir 4 paramètres:

exists:table,id,where,0

La question est de savoir si je voulais que ce soit là où ce n’est pas. Comme où n'est pas 0. 

$validator = Validator::make(
    array(
        'groups' => $groups
    ),
    array(
        'groups' => 'required|exists:groups,jid,parent,!=,0'
    )
);
13
majidarif

Vous pouvez utiliser quelque chose comme ceci:

Validator::extend('not_exists', function($attribute, $value, $parameters)
{
    return DB::table($parameters[0])
        ->where($parameters[1], '=', $value)
        ->andWhere($parameters[2], '<>', $value)
        ->count()<1;
});
11

Vous pouvez utiliser unique

Exemple

'email' => 'unique:users,email_address,NULL,id,account_id,1'

Dans la règle ci-dessus, seules les lignes avec un account_id égal à 1 seraient incluses dans le contrôle unique.

http://laravel.com/docs/4.2/validation#rule-unique

31
Cas Bloem

Avec Laravel 5.2 ou version ultérieure, vous pouvez ajouter les valeurs à vérifier avec un !:

'groups' => 'required|exists:groups,jid,parent,!0'

Le même identifiant va pour unique, vous avez seulement besoin des paramètres supplémentaires:

'groups' => 'required|unique:groups,jid,NULL,id,parent,!0'
5
Tomas Buteler

Je sais que vous recherchez 'pas 0', mais par souci de référence, vous pouvez utiliser NOT_NULL, comme dans:

'groups' => 'required|exists:groups,jid,parent,NOT_NULL'

Il n'est pas répertorié dans la documentation pour le moment, mais voici la discussion à ce sujet (voir le dernier post)

1
Captain Hypertext

Un validateur personnalisé est ici

Validator::extend('not_exists', function($attribute, $value, $parameters, $validator)
{
    $table = array_shift($parameters);
    $db    = \DB::table($table);

    foreach ($parameters as $parameter)
    {
        $check = explode(';', $parameter);
        $col   = array_shift($check);
        $value = array_get($check, 0, array_get($validator->getData(), $col, false));

        $db->where($col, $value);
    }

    return $db->count() < 1;
});   

Exemple d'utilisation:

not_exists:model_has_roles,role_id,model_type;App\User,model_id

Vous pouvez transmettre la valeur par défaut comme ceci:

model_type;App\User
0
Buraco