しばらく調べた後のやり方です。フィールドが「使用中」かどうかをチェックするLaravel APIエンドポイントを作成したかったので、重要な情報は次のとおりです。1)どのDBテーブルですか?2)どのDB列ですか?3)その列に検索語と一致する値がありますか?
これを知って、連想配列を作成できます:
$SEARCHABLE_TABLE_COLUMNS = [
'users' => [ 'email' ],
];
次に、確認する値を設定できます。
$table = 'users';
$column = 'email';
$value = 'alice@bob.com';
次に、とを使用array_key_exists()
しin_array()
て、1、2ステップのコンボを実行し、truthy
条件に基づいて動作します。
// 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);
Laravel固有のPHPコードをお詫びしますが、疑似コードとして読み取れると思うので、そのままにしておきます。重要な部分は、if
同期的に実行される2つのステートメントです。
array_key_exists()
そして、in_array()
PHP関数です。
ソース:
上で示したアルゴリズムの良いGET /in-use/{table}/{column}/{value}
ところtable
はcolumn
、(、、value
は変数)などのRESTエンドポイントを作成できることです。
あなたが持つことができます:
$SEARCHABLE_TABLE_COLUMNS = [
'accounts' => [ 'account_name', 'phone', 'business_email' ],
'users' => [ 'email' ],
];
その後、次のようなGETリクエストを作成できます。
GET /in-use/accounts/account_name/Bob's Drywall
(最後の部分をuriエンコードする必要があるかもしれませんが、通常はそうではありません)
GET /in-use/accounts/phone/888-555-1337
GET /in-use/users/email/alice@bob.com
また、誰も実行できないことにも注意してください。
GET /in-use/users/password/dogmeat1337
理由password
のための許可された列のリストに記載されていませんuser
。
あなたの旅に頑張ってください。