TypeORM এ রেকর্ড পড়া
TypeORM-এ ডেটাবেস থেকে রেকর্ড পড়া বা fetch করা খুব সহজ। TypeORM সরাসরি Entity ক্লাসের মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করে এবং আপনি সহজেই Repository API ব্যবহার করে ডেটা read (পড়া) করতে পারেন।
Read অপারেশনটি সাধারণত find(), findOne(), এবং query() মেথডগুলো ব্যবহার করে করা হয়। এই মেথডগুলোর মাধ্যমে আপনি ডেটাবেস থেকে নির্দিষ্ট শর্ত অনুযায়ী ডেটা আনতে পারেন।
১. find() মেথড
find() মেথডটি ডেটাবেস থেকে সমস্ত রেকর্ড বা নির্দিষ্ট শর্ত অনুযায়ী একাধিক রেকর্ড নিয়ে আসে। এটি মূলত একটি অ্যারে রিটার্ন করে।
উদাহরণ: সমস্ত রেকর্ড পড়া
import { AppDataSource } from './data-source';
import { User } from './entity/User';
async function getAllUsers() {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.find();
console.log(users); // সমস্ত ইউজারের রেকর্ড দেখাবে
}
এখানে, find() মেথডটি সমস্ত User রেকর্ড নিয়ে আসবে এবং কনসোলে প্রিন্ট করবে।
উদাহরণ: শর্ত অনুসারে রেকর্ড পড়া
async function getActiveUsers() {
const userRepository = AppDataSource.getRepository(User);
const activeUsers = await userRepository.find({ where: { isActive: true } });
console.log(activeUsers); // শুধুমাত্র active ইউজারদের রেকর্ড দেখাবে
}
এখানে, find() মেথডটি শুধুমাত্র সেই User রেকর্ডগুলো ফিরিয়ে দেবে, যাদের isActive ফিল্ডের মান true।
২. findOne() মেথড
findOne() মেথডটি ডেটাবেস থেকে একটি একক রেকর্ড নিয়ে আসে, এবং এটি সাধারণত কোনো নির্দিষ্ট primary key বা অন্য কোনো শর্তের ভিত্তিতে ডেটা খোঁজে।
উদাহরণ: একটি নির্দিষ্ট রেকর্ড পড়া (primary key দ্বারা)
async function getUserById(id: number) {
const userRepository = AppDataSource.getRepository(User);
const user = await userRepository.findOne({ where: { id: id } });
console.log(user); // নির্দিষ্ট ইউজারের রেকর্ড দেখাবে
}
এখানে, findOne() মেথডটি id ফিল্ডের ভিত্তিতে একটি নির্দিষ্ট User রেকর্ড ফেরত দেবে।
উদাহরণ: শর্ত অনুসারে একটি রেকর্ড পড়া
async function getUserByEmail(email: string) {
const userRepository = AppDataSource.getRepository(User);
const user = await userRepository.findOne({ where: { email: email } });
console.log(user); // নির্দিষ্ট ইমেইল ঠিকানার ইউজারের রেকর্ড দেখাবে
}
এখানে, findOne() মেথডটি email ফিল্ডের ভিত্তিতে একটি নির্দিষ্ট User রেকর্ড ফেরত দেবে।
৩. query() মেথড
TypeORM-এ query() মেথডটি ডাইরেক্ট SQL কোয়েরি রান করার জন্য ব্যবহৃত হয়। এটি প্রাথমিকভাবে উন্নত কুয়েরি বা কাস্টম কুয়েরি চলানোর জন্য ব্যবহৃত হয়।
উদাহরণ: কাস্টম SQL কোয়েরি ব্যবহার করে রেকর্ড পড়া
async function getUsersByQuery() {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.query('SELECT * FROM user WHERE isActive = true');
console.log(users); // কাস্টম SQL কোয়েরি ব্যবহার করে এক্টিভ ইউজারদের রেকর্ড দেখাবে
}
এখানে, query() মেথডটি সরাসরি SQL কোয়েরি রান করে এবং তার ফলাফল ফিরিয়ে দেয়।
৪. ফিল্টার করা
TypeORM-এর find() এবং findOne() মেথডগুলোতে আপনি where কন্ডিশন ব্যবহার করে সহজেই ডেটা ফিল্টার করতে পারেন। এছাড়াও, select, order, এবং skip / take এর মতো অপশনাল প্যারামিটার ব্যবহার করে ফিল্টার এবং পেজিনেশনও করা যায়।
উদাহরণ: একাধিক কলাম দ্বারা ফিল্টার করা
async function getUsersByFilters() {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.find({
where: {
isActive: true,
email: 'john@example.com',
},
});
console.log(users); // শুধুমাত্র active এবং নির্দিষ্ট ইমেইল সহ ইউজারদের রেকর্ড দেখাবে
}
এখানে, where কন্ডিশন ব্যবহার করে একাধিক কলাম (isActive, email) দ্বারা ডেটা ফিল্টার করা হয়েছে।
উদাহরণ: নির্দিষ্ট কলাম নির্বাচন করা (select)
async function getUserNames() {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.find({
select: ['name'], // শুধু `name` কলাম নির্বাচন করা
});
console.log(users); // শুধু ইউজারের নাম দেখাবে
}
এখানে, select অপশন ব্যবহার করে শুধুমাত্র name কলামটি নির্বাচিত হয়েছে।
উদাহরণ: অর্ডারিং করা (order)
async function getUsersOrderedByName() {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.find({
order: {
name: 'ASC', // নামের ভিত্তিতে ASCENDING অর্ডার
},
});
console.log(users); // নামের ভিত্তিতে অর্ডার করা ইউজারদের রেকর্ড দেখাবে
}
এখানে, order অপশন ব্যবহার করে name কলামের ভিত্তিতে অর্ডার করা হয়েছে।
উদাহরণ: পেজিনেশন (skip and take)
async function getPaginatedUsers(page: number, pageSize: number) {
const userRepository = AppDataSource.getRepository(User);
const users = await userRepository.find({
skip: (page - 1) * pageSize, // পেজিনেশন: কোন রেকর্ড থেকে শুরু হবে
take: pageSize, // প্রতি পেজে কত রেকর্ড দেখানো হবে
});
console.log(users); // পেজিনেশন অনুযায়ী ইউজারদের রেকর্ড দেখাবে
}
এখানে, skip এবং take ব্যবহার করে পেজিনেশন করা হয়েছে, যেখানে প্রতি পেজে কত রেকর্ড হবে এবং কোন রেকর্ড থেকে শুরু হবে তা নির্ধারণ করা হয়।
সারাংশ
TypeORM ডেটাবেস থেকে রেকর্ড পড়া এবং ফিল্টার করা খুব সহজ এবং শক্তিশালী। find() মেথড ব্যবহার করে আপনি একাধিক রেকর্ড পড়তে পারেন, এবং findOne() মেথডের মাধ্যমে একটি নির্দিষ্ট রেকর্ড পড়তে পারেন। এছাড়াও, কাস্টম SQL কোয়েরি রান করার জন্য query() মেথড ব্যবহার করা যায়। ডেটা ফিল্টার করার জন্য where, select, order, এবং skip / take অপশনগুলো ব্যবহার করা যেতে পারে, যা ডেটাকে খুব সহজে প্রক্রিয়াকরণ এবং সাজানো যায়। TypeORM এর এসব ফিচার ডেটাবেস অপারেশনগুলিকে দ্রুত, কার্যকরী এবং স্কেলেবল করে তোলে।