यदि आप AdonisJS का उपयोग कर रहे हैं और आपके पास ABC-202, ABC-201 ... जैसे मिश्रित आईडी हैं, तो आप क्वेरी बिल्डर के साथ कच्चे प्रश्नों को जोड़ सकते हैं और ऊपर दिए गए समाधान को लागू कर सकते हैं ( https://stackoverflow.com/a/25061144/4040735 ) निम्नलिखित नुसार:
const sortField =
'membership_id'
const sortDirection =
'asc'
const subquery = UserProfile.query()
.select(
'user_profiles.id',
'user_profiles.user_id',
'user_profiles.membership_id',
'user_profiles.first_name',
'user_profiles.middle_name',
'user_profiles.last_name',
'user_profiles.mobile_number',
'countries.citizenship',
'states.name as state_of_origin',
'user_profiles.gender',
'user_profiles.created_at',
'user_profiles.updated_at'
)
.leftJoin(
'users',
'user_profiles.user_id',
'users.id'
)
.leftJoin(
'countries',
'user_profiles.nationality',
'countries.id'
)
.leftJoin(
'states',
'user_profiles.state_of_origin',
'states.id'
)
.orderByRaw(
`SUBSTRING(:sortField:,3,15)*1 ${sortDirection}`,
{
sortField: sortField,
}
)
.paginate(
page,
per_page
)
नोट:
इस पंक्ति में: SUBSTRING(:sortField:,3,15)*1 ${sortDirection}
,
- '3' का अर्थ अंकों से पहले अंतिम गैर-संख्यात्मक चरित्र की सूचकांक संख्या है। यदि आपकी मिश्रित आईडी "एबीसी -123" है, तो आपकी सूचकांक संख्या 4 होगी।
- '15' का उपयोग हाइफ़न के बाद किसी भी संख्या के अंकों को पकड़ने के लिए किया जाता है।
- '1' सबस्टेशन पर एक गणितीय ऑपरेशन करता है जो एक नंबर के लिए प्रभावी ढंग से सबस्ट्रिंग कास्ट करता है।
Ref 1: आप यहां कच्चे प्रश्नों में पैरामीटर बाइंडिंग के बारे में अधिक पढ़ सकते हैं: https://knexjs.org/#Raw-Bindings
Ref 2: Adonis Raw Queries: https://adonisjs.com/docs/4.1/query/builder# _raw_queries