কিছুক্ষণ গবেষণা করার পরে এটি করার একটি উপায়'s আমি একটি লারাভেল এপিআই এন্ডপয়েন্ট তৈরি করতে চেয়েছিলাম যা ক্ষেত্রটি "ব্যবহারের ক্ষেত্রে" আছে কিনা তা পরীক্ষা করে দেখায়, তাই গুরুত্বপূর্ণ তথ্যটি হল: 1) কোন ডিবি টেবিল? 2) কি ডিবি কলাম? এবং 3) সেই কলামে এমন কোনও মান আছে যা অনুসন্ধানের পদগুলির সাথে মেলে?
এটি জেনে আমরা আমাদের সহযোগী অ্যারে তৈরি করতে পারি:
$SEARCHABLE_TABLE_COLUMNS = [
'users' => [ 'email' ],
];
তারপরে, আমরা আমাদের মানগুলি সেট করতে পারি যা আমরা যাচাই করব:
$table = 'users';
$column = 'email';
$value = 'alice@bob.com';
এর পরে, আমরা ব্যবহার করতে পারেন array_key_exists()
এবং in_array()
eachother সঙ্গে একটি এক, দুই ধাপ কম্বো চালানো এবং তারপর উপরে কাজ করতে 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);
আমি লারাভেল-নির্দিষ্ট পিএইচপি কোডের জন্য ক্ষমা চাইছি, তবে আমি এটি ছেড়ে দেব কারণ আমি মনে করি আপনি এটি ছদ্ম কোড হিসাবে পড়তে পারেন। গুরুত্বপূর্ণ অংশটি হ'ল দুটি if
বিবৃতি যা সুসংগতভাবে কার্যকর করা হয়।
array_key_exists()
এবং in_array()
পিএইচপি ফাংশন হয়।
উৎস:
অ্যালগরিদম যে আমি উপরে দেখিয়েছেন সম্পর্কে চমৎকার ব্যাপার হল আপনি যেমন বিশ্রাম শেষবিন্দু করতে পারে GET /in-use/{table}/{column}/{value}
(যেখানে table
, column
এবংvalue
ভেরিয়েবল)।
আপনি থাকতে পারে:
$SEARCHABLE_TABLE_COLUMNS = [
'accounts' => [ 'account_name', 'phone', 'business_email' ],
'users' => [ 'email' ],
];
এবং তারপরে আপনি জিইটি অনুরোধগুলি যেমন করতে পারেন:
GET /in-use/accounts/account_name/Bob's Drywall
(আপনার শেষ অংশটি ইউরির প্রয়োজন হতে পারে তবে সাধারণত তা হয় না)
GET /in-use/accounts/phone/888-555-1337
GET /in-use/users/email/alice@bob.com
এটাও লক্ষ করুন যে কেউ না করতে পারে:
GET /in-use/users/password/dogmeat1337
কারণ password
আপনার অনুমোদিত কলামগুলির তালিকায় তালিকাভুক্ত নয় user
।
তোমার ভ্রমনে ভাগ্য সুপ্রসন্ন হোক।