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