CRUD Operations (তৈরি, পড়া, আপডেট, মুছে ফেলা)

টাইপওআরএম (TypeORM) - Web Development

343

TypeORM: CRUD অপারেশনস (Create, Read, Update, Delete)

TypeORM একটি শক্তিশালী ORM (Object-Relational Mapping) লাইব্রেরি যা TypeScript এবং JavaScript ব্যবহার করে ডেটাবেস ম্যানেজমেন্ট এবং অপারেশনগুলো সহজ করে। এতে আপনি খুব সহজে CRUD (Create, Read, Update, Delete) অপারেশনগুলো সম্পাদন করতে পারেন।

এই টিউটোরিয়ালে আমরা TypeORM ব্যবহার করে Create, Read, Update, Delete অপারেশনগুলো কীভাবে করা যায়, তা দেখাবো।


১. Create (তৈরি)

ডেটাবেসে নতুন রেকর্ড তৈরি করার জন্য আমরা TypeORM এর save() মেথড ব্যবহার করি। এই মেথডটি একটি entity ইনস্ট্যান্স গ্রহণ করে এবং সেটি ডেটাবেসে সঞ্চয় করে।

উদাহরণ: নতুন ইউজার তৈরি

import { AppDataSource } from './data-source';
import { User } from './entities/User';

// TypeORM DataSource ইনস্ট্যান্স তৈরি করুন
const userRepository = AppDataSource.getRepository(User);

// নতুন ইউজার তৈরি এবং সেভ করা
const newUser = new User();
newUser.firstName = 'John';
newUser.lastName = 'Doe';
newUser.age = 30;

// ইউজার ডেটাবেসে সেভ করা
await userRepository.save(newUser);
console.log('New user created:', newUser);

এখানে, User হল একটি entity এবং আমরা save() ব্যবহার করে এটি ডেটাবেসে সঞ্চয় করেছি।


২. Read (পড়া)

ডেটাবেস থেকে ডেটা পড়ার জন্য TypeORM এর find() বা findOne() মেথড ব্যবহার করা হয়। find() মেথডটি একাধিক রেকর্ড রিটার্ন করে, এবং findOne() মেথডটি একটি একক রেকর্ড রিটার্ন করে।

উদাহরণ: ইউজার ডেটা পড়া

import { AppDataSource } from './data-source';
import { User } from './entities/User';

// TypeORM DataSource ইনস্ট্যান্স তৈরি করুন
const userRepository = AppDataSource.getRepository(User);

// সমস্ত ইউজার পাওয়া
const allUsers = await userRepository.find();
console.log('All users:', allUsers);

// একক ইউজার পাওয়া
const singleUser = await userRepository.findOneBy({
  id: 1
});
console.log('User with ID 1:', singleUser);

এখানে, find() মেথডটি সমস্ত ইউজার রিটার্ন করবে, এবং findOneBy() মেথডটি নির্দিষ্ট id এর ইউজার রিটার্ন করবে।


৩. Update (আপডেট)

ডেটাবেসে বিদ্যমান রেকর্ড আপডেট করার জন্য TypeORM এর update() মেথড ব্যবহার করা হয়। এই মেথডে প্রথমে আপডেট করতে চাওয়া রেকর্ডটির primary key প্রদান করতে হয় এবং তারপর নতুন ডেটা পাঠানো হয়।

উদাহরণ: ইউজারের তথ্য আপডেট করা

import { AppDataSource } from './data-source';
import { User } from './entities/User';

// TypeORM DataSource ইনস্ট্যান্স তৈরি করুন
const userRepository = AppDataSource.getRepository(User);

// ইউজারের বয়স আপডেট করা
await userRepository.update(1, { age: 35 });
console.log('User with ID 1 updated');

এখানে, update() মেথডটি id: 1 এর ইউজারের age প্রপার্টি 35 এ পরিবর্তন করবে।


৪. Delete (মুছে ফেলা)

ডেটাবেস থেকে রেকর্ড মুছে ফেলতে remove() অথবা delete() মেথড ব্যবহার করা হয়। remove() মেথডটি একটি entity ইনস্ট্যান্স গ্রহণ করে, এবং delete() মেথডটি একটি কন্ডিশন ব্যবহার করে ডেটা মুছে ফেলে।

উদাহরণ: ইউজার মুছে ফেলা

import { AppDataSource } from './data-source';
import { User } from './entities/User';

// TypeORM DataSource ইনস্ট্যান্স তৈরি করুন
const userRepository = AppDataSource.getRepository(User);

// ইউজার ডিলিট করা (by entity)
const userToDelete = await userRepository.findOneBy({ id: 1 });
if (userToDelete) {
  await userRepository.remove(userToDelete);
  console.log('User with ID 1 removed');
}

// অথবা, delete() মেথড ব্যবহার করে
await userRepository.delete(1);
console.log('User with ID 1 deleted');

এখানে, remove() মেথডটি একটি entity ইনস্ট্যান্সের মাধ্যমে ইউজার মুছে ফেলবে, এবং delete() মেথডটি id: 1 দ্বারা ইউজার মুছে ফেলবে।


TypeORM CRUD অপারেশনস এর সারাংশ

অপারেশনমেথডউদাহরণ
Createsave()নতুন রেকর্ড তৈরি এবং সেভ করা
Readfind(), findOne()ডেটাবেস থেকে রেকর্ড পড়া
Updateupdate()বিদ্যমান রেকর্ড আপডেট করা
Deleteremove(), delete()রেকর্ড মুছে ফেলা

TypeORM ব্যবহার করে CRUD অপারেশনগুলোর মাধ্যমে আপনি খুব সহজেই ডেটাবেসের সাথে কাজ করতে পারবেন। save(), find(), update(), এবং delete() মেথডগুলোর মাধ্যমে ডেটাবেসে রেকর্ড তৈরি, পড়া, আপডেট এবং মুছে ফেলা সহজেই করা সম্ভব।

TypeORM-এর সুবিধা হল যে এটি TypeScript এর পূর্ণ সুবিধা নেয় এবং আপনার কোডের টাইপ সুরক্ষা নিশ্চিত করে, যা ডেভেলপারদের জন্য কার্যকরী এবং বাগ মুক্ত কোডিং নিশ্চিত করে।

Content added By

TypeORM-এ নতুন রেকর্ড তৈরি করা

TypeORM হল একটি Object-Relational Mapping (ORM) লাইব্রেরি যা ডেটাবেসের সাথে সহজে কাজ করার জন্য TypeScript এবং JavaScript ব্যবহার করতে সহায়তা করে। TypeORM-এ নতুন রেকর্ড তৈরি করার জন্য সাধারণত Entity তৈরি করা হয় এবং সেই Entity এর মাধ্যমে ডেটাবেসে নতুন রেকর্ড save() বা insert() ফাংশন ব্যবহার করে যোগ করা হয়।

এখানে আমরা দেখব কিভাবে TypeORM ব্যবহার করে একটি নতুন রেকর্ড তৈরি করতে হয়।


১. Entity তৈরি করা

প্রথমে আপনাকে একটি Entity তৈরি করতে হবে। Entity হল TypeORM-এ একটি ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। Entity এর মাধ্যমে আপনি ডেটাবেসে রেকর্ড তৈরি, পড়া, আপডেট এবং মুছে ফেলতে পারেন।

উদাহরণ: User Entity

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;
}

এখানে, User একটি Entity যা ডেটাবেসের User টেবিলের প্রতিনিধিত্ব করে। এই Entity তে id, name, এবং email নামক ৩টি কলাম রয়েছে।


২. নতুন রেকর্ড তৈরি করা

TypeORM-এ নতুন রেকর্ড তৈরি করার জন্য save() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি Entity এর একটি নতুন ইনস্ট্যান্স গ্রহণ করে এবং ডেটাবেসে সেই ইনস্ট্যান্সটি সংরক্ষণ করে।

উদাহরণ: User রেকর্ড তৈরি করা

import { createConnection } from "typeorm";
import { User } from "./User";

createConnection().then(async connection => {
  // নতুন ইউজার তৈরি
  const user = new User();
  user.name = "John Doe";
  user.email = "john.doe@example.com";

  // ডেটাবেসে ইউজার সেভ করা
  await connection.manager.save(user);
  console.log("New user has been saved");
}).catch(error => console.log(error));

এখানে, প্রথমে User Entity এর একটি নতুন ইনস্ট্যান্স তৈরি করা হয়েছে। তারপর name এবং email ফিল্ডে ডেটা অ্যাসাইন করা হয়েছে। শেষে, connection.manager.save(user) ফাংশন দিয়ে ডেটাবেসে নতুন ইউজার রেকর্ড সেভ করা হয়েছে।


৩. Multiple Records Insert করা

একাধিক রেকর্ড সেভ করার জন্য আপনি save() ফাংশনের পরিবর্তে insert() ফাংশনও ব্যবহার করতে পারেন। insert() একবারে একাধিক রেকর্ড ইনসার্ট করতে সহায়ক।

উদাহরণ: একাধিক ইউজার রেকর্ড তৈরি করা

import { createConnection } from "typeorm";
import { User } from "./User";

createConnection().then(async connection => {
  const user1 = new User();
  user1.name = "Alice";
  user1.email = "alice@example.com";

  const user2 = new User();
  user2.name = "Bob";
  user2.email = "bob@example.com";

  // একাধিক ইউজার সেভ করা
  await connection.manager.insert(User, [user1, user2]);
  console.log("Multiple users have been saved");
}).catch(error => console.log(error));

এখানে, আমরা দুইটি নতুন ইউজার তৈরি করেছি এবং connection.manager.insert() ফাংশনের মাধ্যমে একে একে দুজন ইউজার ডেটাবেসে ইনসার্ট করেছি।


৪. নতুন রেকর্ড সৃষ্টির পর রিটার্ন করা

save() ফাংশনটি সফলভাবে রেকর্ড সেভ করার পর, সেভ করা রেকর্ডটি রিটার্ন করে। এটি ডেটাবেস থেকে নতুন রেকর্ডের সম্পূর্ণ ডেটা (যদি তা অন্তর্ভুক্ত করা থাকে) ফিরিয়ে দেয়।

উদাহরণ: নতুন রেকর্ড তৈরি করে রিটার্ন করা

import { createConnection } from "typeorm";
import { User } from "./User";

createConnection().then(async connection => {
  const user = new User();
  user.name = "Charlie";
  user.email = "charlie@example.com";

  const savedUser = await connection.manager.save(user);
  console.log("Saved user:", savedUser);
}).catch(error => console.log(error));

এখানে, savedUser তে সেভ করা রেকর্ডটি রিটার্ন করা হয়েছে, এবং এটি কনসোলে প্রিন্ট করা হয়েছে।


৫. নতুন রেকর্ডের Validations এবং Error Handling

আপনি চাইলে TypeORM-এ রেকর্ডের ডেটার জন্য ভ্যালিডেশন ব্যবহার করতে পারেন। এটি করতে class-validator নামক একটি প্যাকেজ ব্যবহার করা হয়, যা TypeORM-এর সাথে সহজেই সংযুক্ত করা যায়।

উদাহরণ: Validation ব্যবহার করা

প্রথমে, class-validator প্যাকেজ ইনস্টল করতে হবে:

npm install class-validator

এখন, TypeORM Entity তে Validation ডেকোরেটর ব্যবহার করা যাবে।

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
import { IsEmail, Length } from "class-validator";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  @Length(3, 20)
  name: string;

  @Column()
  @IsEmail()
  email: string;
}

এখানে, name ফিল্ডের জন্য @Length এবং email ফিল্ডের জন্য @IsEmail ডেকোরেটর ব্যবহার করা হয়েছে যা ভ্যালিডেশন চালায়।


সারাংশ

TypeORM-এ নতুন রেকর্ড তৈরি করার জন্য save() এবং insert() ফাংশন ব্যবহৃত হয়। save() নতুন রেকর্ড তৈরি এবং মডিফাই করার জন্য ব্যবহৃত হয়, যখন insert() একাধিক রেকর্ড ইনসার্ট করতে ব্যবহৃত হয়। Entity-এ ডেটা ম্যানিপুলেশন, validations, এবং error handling এর মাধ্যমে আপনি সিস্টেমের কার্যকারিতা এবং রিডেবিলিটি আরও বাড়াতে পারেন। TypeORM আপনাকে ডেটাবেস ম্যানেজমেন্ট খুব সহজ এবং প্রোগ্রামেবলভাবে করতে সাহায্য করে।

Content added By

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 এর এসব ফিচার ডেটাবেস অপারেশনগুলিকে দ্রুত, কার্যকরী এবং স্কেলেবল করে তোলে।

Content added By

TypeORM-এ রেকর্ড আপডেট করা

TypeORM-এ ডেটাবেসের রেকর্ড আপডেট করার জন্য কয়েকটি পদ্ধতি রয়েছে, যেগুলির মাধ্যমে আপনি সুনির্দিষ্ট রেকর্ড বা একাধিক রেকর্ড সহজে আপডেট করতে পারেন। TypeORM-এর রেকর্ড আপডেট করতে সবচেয়ে সাধারণ পদ্ধতি হল Repository API ব্যবহার করা। এছাড়া QueryBuilder ব্যবহার করেও আপডেট করা যায়, যা আরো কাস্টমাইজড এবং জটিল কুয়েরি প্রয়োগ করতে সহায়তা করে।

Repository API ব্যবহার করে রেকর্ড আপডেট করা

Repository TypeORM-এ একটি Entity এর জন্য ডেটাবেস অপারেশন (CRUD) পরিচালনা করতে ব্যবহৃত হয়। রেকর্ড আপডেট করার জন্য save() অথবা update() মেথড ব্যবহার করা যেতে পারে।

১. save() মেথড ব্যবহার করে রেকর্ড আপডেট

save() মেথড ব্যবহার করলে এটি যদি রেকর্ডটি নতুন হয় তবে সেই রেকর্ডটি ইনসার্ট করবে এবং যদি রেকর্ডটি আগে থেকে ডেটাবেসে থাকে তবে এটি সেই রেকর্ডটি আপডেট করবে। এটি একটি সহজ এবং সাধারণ পদ্ধতি।

উদাহরণ:

ধরা যাক, আমাদের কাছে একটি User Entity রয়েছে এবং আমরা id এর মাধ্যমে ব্যবহারকারীর নাম আপডেট করতে চাই।

import { AppDataSource } from './data-source';
import { User } from './entity/User';

async function updateUser(id: number, newName: string) {
  // User Repository নিয়ে আসা
  const userRepository = AppDataSource.getRepository(User);

  // রেকর্ডটি খোঁজা
  const user = await userRepository.findOneBy({ id });

  if (user) {
    // রেকর্ড আপডেট করা
    user.name = newName;

    // save() ব্যবহার করে আপডেট করা
    await userRepository.save(user);
    console.log(`User with ID ${id} has been updated.`);
  } else {
    console.log(`User with ID ${id} not found.`);
  }
}

এখানে:

  • findOneBy(): এটি ব্যবহার করে নির্দিষ্ট id দিয়ে User রেকর্ডটি খোঁজা হয়েছে।
  • save(): এটি রেকর্ড আপডেট করার জন্য ব্যবহৃত হয়েছে। যদি রেকর্ডটি পূর্বে বিদ্যমান থাকে, তবে এটি সেই রেকর্ডটিকে আপডেট করবে।

২. update() মেথড ব্যবহার করে রেকর্ড আপডেট

update() মেথডটি সাধারণত একটি নির্দিষ্ট কন্ডিশন (যেমন, id) অনুযায়ী ডেটাবেসে রেকর্ড আপডেট করতে ব্যবহৃত হয়। এটি কোনো Entity এর ইনস্ট্যান্স গ্রহণ না করে সরাসরি ডেটাবেসে আপডেট করে। এটি সিংক ফাংশন এবং ব্যাচ আপডেটের জন্য উপযুক্ত।

উদাহরণ:

import { AppDataSource } from './data-source';
import { User } from './entity/User';

async function updateUser(id: number, newName: string) {
  const userRepository = AppDataSource.getRepository(User);

  // update() ব্যবহার করে রেকর্ড আপডেট করা
  const result = await userRepository.update(id, {
    name: newName,
  });

  if (result.affected) {
    console.log(`User with ID ${id} has been updated.`);
  } else {
    console.log(`User with ID ${id} not found.`);
  }
}

এখানে:

  • update(): এই মেথডটি সরাসরি id দিয়ে নির্দিষ্ট রেকর্ড আপডেট করে। প্রথম আর্গুমেন্টে আপডেট করার জন্য কন্ডিশন (যেমন id) এবং দ্বিতীয় আর্গুমেন্টে আপডেটের নতুন ডেটা পাঠানো হয়।
  • result.affected: এটি চেক করে দেখবে যে আপডেট করা রেকর্ডের সংখ্যা ০ বা তার বেশি, যাতে নিশ্চিত হওয়া যায় যে রেকর্ডটি আপডেট হয়েছে।

QueryBuilder ব্যবহার করে রেকর্ড আপডেট

QueryBuilder একটি শক্তিশালী TypeORM ফিচার, যা আরো কাস্টম কুয়েরি করতে এবং জটিল ডেটাবেস অপারেশন পরিচালনা করতে ব্যবহৃত হয়। এর মাধ্যমে আপনি SQL কুয়েরি তৈরি করে রেকর্ড আপডেট করতে পারেন।

QueryBuilder ব্যবহার করে রেকর্ড আপডেট উদাহরণ:

import { AppDataSource } from './data-source';
import { User } from './entity/User';

async function updateUser(id: number, newName: string) {
  const userRepository = AppDataSource.getRepository(User);

  // QueryBuilder ব্যবহার করে রেকর্ড আপডেট করা
  const result = await userRepository
    .createQueryBuilder()
    .update(User)
    .set({ name: newName })
    .where("id = :id", { id })
    .execute();

  if (result.affected) {
    console.log(`User with ID ${id} has been updated.`);
  } else {
    console.log(`User with ID ${id} not found.`);
  }
}

এখানে:

  • createQueryBuilder(): এটি QueryBuilder শুরু করার জন্য ব্যবহৃত হয়।
  • update(User): এই মেথডটি আপডেট অপারেশন শুরু করতে ব্যবহৃত হয় এবং এটি User Entity এর সাথে কাজ করবে।
  • set(): এটি আপডেট করার জন্য নতুন মান দেয়।
  • where(): কন্ডিশন (যেমন id = :id) নির্ধারণ করতে ব্যবহৃত হয়।
  • execute(): এটি কুয়েরি এক্সিকিউট করে এবং ডেটাবেসে পরিবর্তন প্রযোজ্য করে।

সারাংশ

TypeORM-এ রেকর্ড আপডেট করার জন্য দুইটি প্রধান পদ্ধতি রয়েছে:

  1. save(): এটি Entity-এর ইনস্ট্যান্স গ্রহণ করে এবং ডেটাবেসে সেই ইনস্ট্যান্সের ডেটা আপডেট করে।
  2. update(): এটি সরাসরি কন্ডিশন দিয়ে ডেটাবেসে আপডেট সম্পন্ন করে, Entity ইনস্ট্যান্স প্রয়োজন হয় না।

যদি আপনি আরো কাস্টম এবং জটিল কুয়েরি চান, তবে QueryBuilder ব্যবহারের মাধ্যমে আপনার আপডেট কুয়েরি আরও ডাইনামিকভাবে তৈরি করা সম্ভব। TypeORM এর এই পদ্ধতিগুলো ডেটাবেস অপারেশন সহজ এবং দক্ষ করে তোলে, এবং কম সময়ে বড় ডেটাসেটের মধ্যে অপারেশন সম্পাদন করতে সহায়তা করে।

Content added By

TypeORM এ রেকর্ড মুছে ফেলা (Delete Records)

TypeORM একটি শক্তিশালী ORM (Object-Relational Mapping) লাইব্রেরি, যা আপনাকে ডেটাবেসে CRUD (Create, Read, Update, Delete) অপারেশনগুলি সহজভাবে সম্পাদন করতে সাহায্য করে। Delete অপারেশন TypeORM এর একটি গুরুত্বপূর্ণ অংশ, যা দিয়ে ডেটাবেস টেবিল থেকে রেকর্ড মুছে ফেলা যায়। এখানে Delete অপারেশনের জন্য বিভিন্ন পদ্ধতি এবং তাদের ব্যবহারের উদাহরণ আলোচনা করা হবে।


১. remove() এবং delete() মেথডস

TypeORM এ রেকর্ড মুছে ফেলার জন্য দুটি প্রধান মেথড রয়েছে:

  1. remove()
  2. 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 ডেভেলপারদের জন্য ডেটাবেসে রেকর্ড মুছে ফেলার জন্য অনেক সুবিধাজনক এবং নমনীয় অপশন সরবরাহ করে।

Content added By
Promotion

Are you sure to start over?

Loading...