Hier ist eine Möglichkeit, wie ich es mache, nachdem ich es eine Weile recherchiert habe. Ich wollte einen Laravel-API-Endpunkt erstellen, der prüft, ob ein Feld "verwendet" wird. Die folgenden wichtigen Informationen lauten daher: 1) Welche DB-Tabelle? 2) Welche DB-Spalte? und 3) gibt es in dieser Spalte einen Wert, der mit den Suchbegriffen übereinstimmt?
Wenn wir das wissen, können wir unser assoziatives Array konstruieren:
$SEARCHABLE_TABLE_COLUMNS = [
'users' => [ 'email' ],
];
Dann können wir unsere Werte festlegen, die wir überprüfen werden:
$table = 'users';
$column = 'email';
$value = 'alice@bob.com';
Dann können wir array_key_exists()und zusammen in_array()eine ein-, zweistufige Kombination ausführen und dann auf die truthyBedingung reagieren:
// 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);
Ich entschuldige mich für den Laravel-spezifischen PHP-Code, aber ich werde ihn verlassen, weil ich denke, dass Sie ihn als Pseudocode lesen können. Der wichtige Teil sind die beiden ifAnweisungen, die synchron ausgeführt werden.
array_key_exists()und in_array()sind PHP-Funktionen.
Quelle:
Das Schöne an dem Algorithmus , dass ich oben zeigte , ist , dass Sie einen REST - Endpunkt wie machen können GET /in-use/{table}/{column}/{value}(wo table, columnund valuesind Variablen).
Du könntest haben:
$SEARCHABLE_TABLE_COLUMNS = [
'accounts' => [ 'account_name', 'phone', 'business_email' ],
'users' => [ 'email' ],
];
und dann könnten Sie GET-Anfragen stellen wie:
GET /in-use/accounts/account_name/Bob's Drywall (Möglicherweise müssen Sie den letzten Teil uri-codieren, normalerweise jedoch nicht.)
GET /in-use/accounts/phone/888-555-1337
GET /in-use/users/email/alice@bob.com
Beachten Sie auch, dass niemand tun kann:
GET /in-use/users/password/dogmeat1337weil passwordist nicht in Ihrer Liste der zulässigen Spalten für aufgeführt user.
Viel Glück auf Ihrer Reise.