Voici une façon de le faire après avoir fait des recherches pendant un moment. Je voulais créer un point de terminaison d'API Laravel qui vérifie si un champ est "en cours d'utilisation", les informations importantes sont donc: 1) quelle table DB? 2) quelle colonne DB? et 3) y a-t-il une valeur dans cette colonne qui correspond aux termes de recherche?
Sachant cela, nous pouvons construire notre tableau associatif:
$SEARCHABLE_TABLE_COLUMNS = [
'users' => [ 'email' ],
];
Ensuite, nous pouvons définir nos valeurs que nous vérifierons:
$table = 'users';
$column = 'email';
$value = 'alice@bob.com';
Ensuite, nous pouvons utiliser array_key_exists()
et in_array()
avec eachother pour exécuter un combo en une, deux étapes, puis agir sur la truthy
condition:
// step 1: check if 'users' exists as a key in `$SEARCHABLE_TABLE_COLUMNS`
if (array_key_exists($table, $SEARCHABLE_TABLE_COLUMNS)) {
// step 2: check if 'email' is in the array: $SEARCHABLE_TABLE_COLUMNS[$table]
if (in_array($column, $SEARCHABLE_TABLE_COLUMNS[$table])) {
// if table and column are allowed, return Boolean if value already exists
// this will either return the first matching record or null
$exists = DB::table($table)->where($column, '=', $value)->first();
if ($exists) return response()->json([ 'in_use' => true ], 200);
return response()->json([ 'in_use' => false ], 200);
}
// if $column isn't in $SEARCHABLE_TABLE_COLUMNS[$table],
// then we need to tell the user we can't proceed with their request
return response()->json([ 'error' => 'Illegal column name: '.$column ], 400);
}
// if $table isn't a key in $SEARCHABLE_TABLE_COLUMNS,
// then we need to tell the user we can't proceed with their request
return response()->json([ 'error' => 'Illegal table name: '.$table ], 400);
Je m'excuse pour le code PHP spécifique à Laravel, mais je vais le laisser car je pense que vous pouvez le lire sous forme de pseudo-code. La partie importante est les deux if
instructions qui sont exécutées de manière synchrone.
array_key_exists()
et in_array()
sont des fonctions PHP.
la source:
La bonne chose à propos de l'algorithme que j'ai montré ci - dessus est que vous pouvez faire un point de terminaison REST tels que GET /in-use/{table}/{column}/{value}
(où table
, column
et value
sont des variables).
Tu aurais pu:
$SEARCHABLE_TABLE_COLUMNS = [
'accounts' => [ 'account_name', 'phone', 'business_email' ],
'users' => [ 'email' ],
];
puis vous pouvez faire des requêtes GET telles que:
GET /in-use/accounts/account_name/Bob's Drywall
(vous devrez peut-être encoder uri la dernière partie, mais généralement pas)
GET /in-use/accounts/phone/888-555-1337
GET /in-use/users/email/alice@bob.com
Notez également que personne ne peut faire:
GET /in-use/users/password/dogmeat1337
car password
n'est pas répertorié dans votre liste de colonnes autorisées pour user
.
Bonne chance pour ton voyage.