Rails-এ, আপনি আপনার ডেটা অ্যাক্সেস করতে আপনার মডেলের মাধ্যমে ডেটাবেস অনুসন্ধান করতে পারেন।
আপনি ActiveRecord
ব্যবহার করে এটি করতে পারেন পদ্ধতি।
যেমন where
, find
, অথবা find_by
.
ফলে আপনি পাবেন :
-
find_by
দিয়ে , একটি একক রেকর্ড বাnil
-
where
সহ , একটিActiveRecord::Relation
বস্তু -
find
দিয়ে , একটি একক রেকর্ড, এটির প্রাথমিক কলাম দ্বারা পাওয়া যায় (সাধারণতid
), না পাওয়া গেলে একটি ব্যতিক্রম উত্থাপন করে
অন্য কথায় :
আপনি যদি একটি রেকর্ড (একটি নির্দিষ্ট ব্যবহারকারী) আশা করছেন, তাহলে find_by
ব্যবহার করুন , একাধিক রেকর্ডের জন্য (ব্যবহারকারীদের একটি তালিকা) where
ব্যবহার করুন .
কিন্তু where
এটি ব্যবহার করার অনেক উপায় রয়েছে, যা প্রায়শই নতুনদের বিভ্রান্ত করে।
কোন সমস্যা নেই!
আপনি where
ব্যবহার করতে পারেন এমন বিভিন্ন উপায়ে আমরা একবার নজর দেব আপনার রেল অ্যাপ্লিকেশনগুলিতে৷
বেসিক যেখানে শর্তাবলী
where
ব্যবহার করার উদ্দেশ্য আপনার ডাটাবেসের তথ্য ফিল্টার করে এমন একটি ক্যোয়ারী তৈরি করা, যাতে আপনি শুধুমাত্র আপনার পছন্দের সারিগুলি পান৷
উদাহরণস্বরূপ :
একটি Book
দেওয়া হয়েছে মডেল, title
সহ , author
&category
.
আপনি একটি নির্দিষ্ট লেখকের সমস্ত বই বা একটি নির্দিষ্ট বিভাগের অধীনে ফাইল করা সমস্ত বই খুঁজে পেতে চাইতে পারেন৷
৷এখানে একটি প্রশ্ন আছে :
Book.where(category: "Ruby")
এটি একটি category
সহ সমস্ত বই ফেরত দেয় "রুবি" এর।
আপনি শর্তগুলিও একত্রিত করতে পারেন৷
এরকম :
Book.where(category: "Ruby", author: "Jesus Castello")
এটি category
উভয়ের সাথে মেলে এমন বই ফেরত দেয় &author
.
এবং আপনি where
একত্রিত করতে পারেন একটি সুযোগ সহ।
# scope definition class Book scope :long_title, -> { where("LENGTH(title) > 20") } end # controller code @books = Book.long_title.where(category: "Ruby")
একটি হ্যাশ ব্যবহার করা (fruit: "apple"
), আপনাকে একটি কলাম কিছুর সমান কিনা তা পরীক্ষা করতে দেয়।
কিন্তু যদি আপনি সমতা খুঁজছেন না?
তারপর আপনাকে একটি স্ট্রিং ব্যবহার করতে হবে।
রেল যেখানে:এর চেয়ে বড় এবং তার চেয়ে কম
আপনি যদি “এর চেয়ে বড়”, “এর চেয়ে কম” বা এরকম কিছু…
চেক করতে চানএটি এভাবে করুন :
Book.where("LENGTH(title) > 20")
আপনি যদি মানগুলিকে প্রসারিত করতে চান…
এটি এভাবে করুন :
Book.where("LENGTH(title) > ?", params[:min_length])
এই ?
একটি "প্লেসহোল্ডার" বলা হয়, এবং এটি "SQL ইনজেকশন" আক্রমণ এড়াতে নিরাপত্তার জন্য ব্যবহৃত হয়।
আরেকটি বিকল্প হল নামযুক্ত স্থানধারক ব্যবহার করা।
উদাহরণ :
Book.where("LENGTH(title) > :min", min: params[:min_length])
আমি এটিকে প্রশ্ন চিহ্ন স্থানধারকের তুলনায় কম সাধারণ বলে মনে করি, তবে এটি অনেক ইন্টারপোলেটেড মান জড়িত প্রশ্নের জন্য কার্যকর হতে পারে।
কোথায় নয় এবং কোথায় বা শর্তগুলি কীভাবে ব্যবহার করবেন
আসুন আরও জটিল প্রশ্ন দেখি।
আপনি যদি পরীক্ষা করতে চান যে একটি শর্ত সত্য নয়, তাহলে আপনি where
একত্রিত করতে পারেন not
দিয়ে পদ্ধতি।
এখানে একটি উদাহরণ আছে :
Book.where.not(category: "Java")
আরেকটি উদাহরণ :
Book.where.not(title: nil)
এটি Book
খুঁজে পায় একটি title
সহ এটা nil
নয় .
একটি OR শর্ত সম্পর্কে কী?
আপনি where
একত্রিত করতে পারেন or
দিয়ে দুই বা ততোধিক শর্তের যে কোনো একটির সাথে মেলে এমন সারি পাওয়ার পদ্ধতি।
এটি কীভাবে কাজ করে তা এখানে রয়েছে :
Book.where(category: "Programming").or(Book.where(category: "Ruby"))
এটি দুটি where
একত্রিত করে একটিতে প্রশ্ন করুন৷
একবার চেষ্টা করে দেখুন!
রেইলস যেখানে অ্যারে উদাহরণে
আমরা যে সমস্ত উদাহরণ দেখেছি সেগুলি একটি নির্দিষ্ট মান সন্ধান করে৷
কিন্তু আপনি একাধিক মান খুঁজতে পারেন।
কিভাবে?
একটি অ্যারে ব্যবহার করা হচ্ছে!
উদাহরণ :
Book.where(id: [1,2,3])
এটি একটি "IN" কোয়েরি তৈরি করে যা একই সময়ে, এই সমস্ত আইডিগুলি অনুসন্ধান করবে৷
SELECT "books".* FROM "books" WHERE "books"."id" IN (1, 2, 3)
আপনি রেল লগগুলিতে এই প্রশ্নটি পাবেন।
রেলস অ্যাসোসিয়েশন শর্তে যোগদান করে
আপনি যদি কোনো অ্যাসোসিয়েশন মানের উপর ভিত্তি করে মিল খুঁজছেন, তাহলে আপনাকে সেই অ্যাসোসিয়েশনটি joins
সাথে উপলব্ধ করতে হবে পদ্ধতি।
তাহলে আপনি এটি করতে পারেন৷ :
Book.joins(:comments).where(comments: { id: 2 })
এই প্রশ্নের সাথে আপনি সমস্ত বই পাবেন, যার একটি মন্তব্য আছে, এবং মন্তব্য id
হল 2
.
স্ট্রিং সংস্করণের জন্য :
Book.joins(:comments).where("comments.id = 2")
যেখানে comments
হল টেবিলের নাম, এবং id
কলামের নাম।
How to search inside text with a where like condition
আপনি যদি একটি অনুসন্ধান ফাংশন বাস্তবায়ন করতে চান, আপনি একটি আংশিক মিলের জন্য অনুমতি দিতে চাইতে পারেন৷
৷আপনি একটি "লাইক" ক্যোয়ারী দিয়ে এটি করতে পারেন৷
৷এখানে একটি উদাহরণ আছে :
Book.where("title LIKE ?", "%" + params[:q] + "%")
এটি সার্চ টেক্সট আছে এমন সব শিরোনাম খুঁজে পায়, যা params (params[:q]
দ্বারা প্রদত্ত ), শিরোনামের ভিতরে যে কোন জায়গায়।
খুব সহায়ক প্রশ্ন!
শতাংশ প্রতীক কি ?
SQL-এ, %
একটি ওয়াইল্ডকার্ড অক্ষর৷
ভিডিও:যেখানে বনাম Find_By বিস্তারিতভাবে
সারাংশ
আপনি শিখেছেন কিভাবে রেল where
ব্যবহার করতে হয় আপনার ActiveRecord
প্রশ্ন করার পদ্ধতি মডেল!
সহ :
- কিভাবে একাধিক শর্ত দ্বারা ফিল্টার করতে হয়
- কার্যকরভাবে একাধিক সারি খুঁজে পেতে অ্যারে ব্যবহার করবেন
- কিভাবে
where
ব্যবহার করবেনor
এর সাথে একত্রে ¬
আরও জটিল প্রশ্ন লেখার পদ্ধতি
এখন এটিকে বাস্তবে প্রয়োগ করার পালা আপনার।
পড়ার জন্য ধন্যবাদ 🙂