TypeORM এ রেকর্ড মুছে ফেলা (Delete Records)
TypeORM একটি শক্তিশালী ORM (Object-Relational Mapping) লাইব্রেরি, যা আপনাকে ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশনগুলি সহজভাবে সম্পাদন করতে সাহায্য করে। Delete অপারেশন TypeORM এর একটি গুরুত্বপূর্ণ অংশ, যা দিয়ে ডেটাবেস টেবিল থেকে রেকর্ড মুছে ফেলা যায়। এখানে Delete অপারেশনের জন্য বিভিন্ন পদ্ধতি এবং তাদের ব্যবহারের উদাহরণ আলোচনা করা হবে।
১. remove() এবং delete() মেথডস
TypeORM এ রেকর্ড মুছে ফেলার জন্য দুটি প্রধান মেথড রয়েছে:
remove()delete()
এই দুটি মেথডের মধ্যে কিছু পার্থক্য রয়েছে, এবং আপনি আপনার প্রয়োজন অনুসারে কোনটি ব্যবহার করবেন তা নির্ধারণ করতে পারেন।
২. remove() মেথড
remove() মেথডটি মূলত Entity অবজেক্টের মাধ্যমে রেকর্ড মুছে ফেলে। এই মেথডটি ডেটাবেসে রেকর্ড মুছে ফেলার পাশাপাশি, এটি আপনার Entity অবজেক্টটি detached অবস্থায় পরিবর্তন করে দেয়। অর্থাৎ, এটি Entity ইনস্ট্যান্সকে মুছে ফেলার জন্য Repository বা Manager এর সাহায্য নেয় এবং এটি ডেটাবেসে সংশ্লিষ্ট রেকর্ডটি মুছে ফেলে।
উদাহরণ:
import { AppDataSource } from "./data-source";
import { User } from "./entity/User";
async function deleteUser() {
const userRepository = AppDataSource.getRepository(User);
// Find the user by id
const user = await userRepository.findOneBy({
id: 1,
});
if (user) {
// Delete the user from the database
await userRepository.remove(user);
console.log("User has been removed.");
} else {
console.log("User not found.");
}
}
এখানে, remove() মেথড ব্যবহার করে প্রথমে একটি user অবজেক্ট খোঁজা হচ্ছে এবং তারপর ঐ অবজেক্টটি remove করা হচ্ছে।
যখন remove() ব্যবহার করবেন:
- যখন আপনি একটি Entity অবজেক্টের মাধ্যমে ডেটাবেসে রেকর্ড মুছতে চান।
- যখন আপনি Entity সম্পর্কিত অতিরিক্ত অপারেশন করতে চান, যেমন ডেটাবেসের সাথে সম্পর্কিত ডিপেন্ডেন্ট ডেটা মুছতে হবে।
৩. delete() মেথড
delete() মেথডটি Entity অবজেক্ট না ব্যবহার করে সরাসরি ডেটাবেস টেবিল থেকে রেকর্ড মুছে ফেলে। এটি id বা অন্য কোনো শর্ত অনুসারে রেকর্ড মুছে ফেলতে পারে। delete() মেথডটি আপনার Entity অবজেক্টকে ব্যবহার না করে সরাসরি primary key বা criteria অনুযায়ী ডেটাবেসে রেকর্ড মুছে ফেলে।
উদাহরণ:
import { AppDataSource } from "./data-source";
import { User } from "./entity/User";
async function deleteUser() {
const userRepository = AppDataSource.getRepository(User);
// Delete the user with id = 1
const result = await userRepository.delete(1);
if (result.affected > 0) {
console.log("User has been deleted.");
} else {
console.log("User not found.");
}
}
এখানে, delete() মেথড ব্যবহার করে সরাসরি id 1 সহ রেকর্ডটি ডেটাবেস থেকে মুছে ফেলা হয়েছে।
যখন delete() ব্যবহার করবেন:
- যখন আপনি ডেটাবেসের রেকর্ড সরাসরি তার primary key বা অন্য কোনও শর্ত অনুসারে মুছে ফেলতে চান।
- যখন আপনি Entity অবজেক্টে কাজ না করে শুধু ডেটাবেস অপারেশন করতে চান।
৪. soft delete (নরম ডিলিট)
TypeORM এ আপনি soft delete ব্যবহার করতে পারেন, যেখানে রেকর্ডটি ডিলিট করা হয় না, বরং একটি flag (যেমন isDeleted) এর মাধ্যমে রেকর্ডটি অদৃশ্য (inactive) করা হয়। এটি শুধুমাত্র একটি logical delete যেখানে ডেটা ডাটাবেসে থাকে, কিন্তু কার্যকরভাবে এটি আর ব্যবহার করা যায় না।
soft delete সক্রিয় করার জন্য:
- Entity এর মধ্যে
@DeleteDateColumn()ব্যবহার করতে হবে।
import { Entity, PrimaryGeneratedColumn, Column, DeleteDateColumn } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@DeleteDateColumn()
deletedAt: Date;
}
soft delete অপারেশন উদাহরণ:
import { AppDataSource } from "./data-source";
import { User } from "./entity/User";
async function softDeleteUser() {
const userRepository = AppDataSource.getRepository(User);
// Find the user by id
const user = await userRepository.findOneBy({
id: 1,
});
if (user) {
// Soft delete the user
await userRepository.softRemove(user);
console.log("User has been soft deleted.");
} else {
console.log("User not found.");
}
}
এখানে, softRemove() মেথড ব্যবহার করে soft delete সম্পন্ন করা হয়েছে। এটি মূলত deletedAt কলামটিতে একটি timestamp রেখে ডেটাকে অদৃশ্য করে দেয়।
soft delete এর সুবিধা:
- আপনি ডেটাকে সম্পূর্ণ মুছে ফেলতে না চেয়ে, শুধুমাত্র invisible বা inactive করতে পারবেন।
- Restoration (পুনরুদ্ধার) সহজ, কারণ ডেটা ডেটাবেসে থাকে।
৫. Multiple Record Delete
একাধিক রেকর্ড মুছতে চাইলে আপনি delete() মেথড ব্যবহার করতে পারেন, যেখানে আপনি criteria নির্ধারণ করে একাধিক রেকর্ড মুছে ফেলতে পারবেন।
উদাহরণ:
import { AppDataSource } from "./data-source";
import { User } from "./entity/User";
async function deleteMultipleUsers() {
const userRepository = AppDataSource.getRepository(User);
// Delete users with age greater than 50
const result = await userRepository.delete({ age: MoreThan(50) });
if (result.affected > 0) {
console.log(`${result.affected} users have been deleted.`);
} else {
console.log("No users found.");
}
}
এখানে, delete() মেথড ব্যবহার করে একাধিক রেকর্ড মুছে ফেলা হয়েছে, যেখানে age এর মান ৫০ এর বেশি।
সারাংশ
TypeORM এ রেকর্ড মুছে ফেলার জন্য দুটি প্রধান মেথড রয়েছে: remove() এবং delete()।
remove()মেথডটি Entity অবজেক্টের মাধ্যমে রেকর্ড মুছে ফেলে।delete()মেথডটি সরাসরি ডেটাবেস টেবিল থেকে রেকর্ড মুছে ফেলে এবং এটি ডেটাবেসের primary key বা criteria অনুসারে কাজ করে।
TypeORM এ আপনি soft delete ব্যবহারের মাধ্যমে রেকর্ডগুলি মুছে না ফেলে, শুধু অদৃশ্য (inactive) করতে পারেন, যা ভবিষ্যতে পুনরুদ্ধারের সুবিধা দেয়।
এভাবে, TypeORM ডেভেলপারদের জন্য ডেটাবেসে রেকর্ড মুছে ফেলার জন্য অনেক সুবিধাজনক এবং নমনীয় অপশন সরবরাহ করে।