CodeIgniter একটি শক্তিশালী ডাটাবেস লেয়ার সরবরাহ করে, যা সহজেই ডাটাবেসের সাথে যোগাযোগ করতে এবং ডেটা ম্যানিপুলেশন সম্পাদন করতে সহায়তা করে। ডাটাবেস ইন্টারঅ্যাকশনের জন্য এটি বিভিন্ন পদ্ধতি প্রদান করে, যেমন Query Builder, Raw SQL Queries, এবং Model Class।
CodeIgniter-এ ডাটাবেস ব্যবহারের আগে ডাটাবেস কনফিগারেশন সেটআপ করতে হবে।
ডাটাবেস কনফিগারেশন app/Config/Database.php
ফাইলে থাকে। উদাহরণ:
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'your_database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => true,
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
উপরে আপনার ডাটাবেসের তথ্য পূরণ করুন।
ডাটাবেস ব্যবহার করার জন্য Database Service লোড করতে হবে:
$db = \Config\Database::connect();
CodeIgniter-এ Query Builder একটি সুবিধাজনক টুল, যা ডাটাবেস অপারেশনকে সহজ করে।
$data = [
'name' => 'Product 1',
'price' => 100,
];
$db->table('products')->insert($data);
$query = $db->table('products')->get();
$result = $query->getResult();
$data = [
'price' => 120,
];
$db->table('products')->where('id', 1)->update($data);
$db->table('products')->where('id', 1)->delete();
CodeIgniter-এ Raw SQL Queries ব্যবহার করা যায়।
$query = $db->query('SELECT * FROM products');
$result = $query->getResult();
$db->query("INSERT INTO products (name, price) VALUES ('Product 2', 200)");
$db->query("UPDATE products SET price = 150 WHERE id = 2");
$db->query("DELETE FROM products WHERE id = 2");
Model Class ব্যবহার করলে ডাটাবেস ইন্টারঅ্যাকশন আরও সহজ হয়।
app/Models/ProductModel.php
ফাইলে একটি Model তৈরি করুন:
<?php
namespace App\Models;
use CodeIgniter\Model;
class ProductModel extends Model
{
protected $table = 'products';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'price'];
}
Controller এ Model লোড করে ব্যবহার করুন:
$productModel = new \App\Models\ProductModel();
// Insert
$productModel->save(['name' => 'Product 3', 'price' => 300]);
// Retrieve
$products = $productModel->findAll();
// Update
$productModel->update(3, ['price' => 350]);
// Delete
$productModel->delete(3);
CodeIgniter Pagination Library ব্যবহার করে ডেটা প্রদর্শন সহজ হয়।
Controller-এ Pagination কনফিগার করুন:
$productModel = new \App\Models\ProductModel();
$data['products'] = $productModel->paginate(10); // প্রতি পৃষ্ঠায় ১০টি রেকর্ড
$data['pager'] = $productModel->pager;
return view('product_list', $data);
<?= $pager->links(); ?>
CodeIgniter ডাটাবেসে Transaction পরিচালনার সুবিধা দেয়।
$db->transStart();
$db->table('products')->insert(['name' => 'Product A', 'price' => 400]);
$db->table('products')->update(['price' => 450], ['id' => 1]);
$db->transComplete();
if ($db->transStatus() === false) {
echo "Transaction Failed!";
} else {
echo "Transaction Successful!";
}
CodeIgniter ডাটাবেস ত্রুটি ডিবাগিং সহজ করার জন্য DBDebug
প্রদান করে। এটি app/Config/Database.php
-এ সেট করা থাকে:
'DBDebug' => true,
if (!$db->table('products')->insert($data)) {
print_r($db->error());
}
এই বৈশিষ্ট্যগুলো CodeIgniter-কে ডাটাবেস ইন্টিগ্রেশনের জন্য একটি জনপ্রিয় ফ্রেমওয়ার্ক করে তুলেছে।
CodeIgniter ডাটাবেস ম্যানেজমেন্ট সহজ এবং কার্যকর করতে একটি শক্তিশালী Database Connectivity এবং Query Builder সিস্টেম সরবরাহ করে। এটি ডাটাবেস সংযোগ, কুয়েরি এক্সিকিউশন, এবং ডেটা ম্যানিপুলেশনকে সহজতর করে।
CodeIgniter-এ ডাটাবেস সংযোগের জন্য app/Config/Database.php
ফাইল ব্যবহার করা হয়।
public $default = [
'DSN' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'your_database_name',
'DBDriver' => 'MySQLi',
'DBPrefix' => '',
'pConnect' => false,
'DBDebug' => (ENVIRONMENT !== 'production'),
'charset' => 'utf8',
'DBCollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'strictOn' => false,
'failover' => [],
'port' => 3306,
];
localhost
।ডাটাবেস কানেকশন তৈরি করতে Model বা Database Library ব্যবহার করতে পারেন।
$db = \Config\Database::connect();
Query Builder CodeIgniter-এর একটি বিশেষ ফিচার, যা ডাটাবেস অপারেশন সহজ করতে সাহায্য করে। এটি SQL কুয়েরি লিখার প্রয়োজন কমিয়ে দেয়।
$query = $db->table('products')->get();
$result = $query->getResult();
$query = $db->table('products')->select('name, price')->get();
$result = $query->getResult();
$query = $db->table('products')->where('price >', 500)->get();
$result = $query->getResult();
$query = $db->table('products')
->orderBy('price', 'DESC')
->limit(10)
->get();
$result = $query->getResult();
$data = [
'name' => 'Product 1',
'price' => 100,
'description' => 'Product description'
];
$db->table('products')->insert($data);
$data = [
[
'name' => 'Product 1',
'price' => 100,
'description' => 'Description 1'
],
[
'name' => 'Product 2',
'price' => 200,
'description' => 'Description 2'
]
];
$db->table('products')->insertBatch($data);
$data = [
'price' => 150
];
$db->table('products')->where('id', 1)->update($data);
$data = [
['id' => 1, 'price' => 150],
['id' => 2, 'price' => 250],
];
$db->table('products')->updateBatch($data, 'id');
$db->table('products')->where('id', 1)->delete();
$db->table('products')->truncate();
CodeIgniter-এ কাস্টম SQL কুয়েরি চালানোর সুবিধাও রয়েছে।
$query = $db->query("SELECT * FROM products WHERE price > 500");
$result = $query->getResult();
Query থেকে ডেটা রিট্রিভ করার জন্য বিভিন্ন মেথড ব্যবহার করা যায়:
উদাহরণ:
$query = $db->table('products')->get();
$result = $query->getResultArray();
কোনো কুয়েরি চালানোর পর সর্বশেষ কুয়েরি দেখতে ব্যবহার করুন:
echo $db->getLastQuery();
এটি ডিবাগিং এবং সমস্যা সমাধানে সহায়ক।
CodeIgniter-এর Database Connectivity এবং Query Builder ডাটাবেস সম্পর্কিত কাজকে অত্যন্ত কার্যকর এবং সুরক্ষিত করে। ডাটাবেসের সঙ্গে কাজ করার জন্য এটি ডেভেলপারদের জন্য একটি সহজ এবং নির্ভরযোগ্য সমাধান।
CRUD (Create, Read, Update, Delete) হলো ডাটাবেস পরিচালনার চারটি মৌলিক কাজ। CodeIgniter এর Model এবং Query Builder ক্লাস ব্যবহার করে সহজেই CRUD অপারেশন সম্পন্ন করা যায়।
ডাটাবেসে একটি টেবিল তৈরি করুন। উদাহরণস্বরূপ, products
নামে একটি টেবিল তৈরি করা হলো:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
price DECIMAL(10, 2) NOT NULL
);
app/Models/ProductModel.php
ফাইলে একটি Model তৈরি করুন:
namespace App\Models;
use CodeIgniter\Model;
class ProductModel extends Model
{
protected $table = 'products';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'description', 'price'];
}
Controller থেকে ডেটা ইনসার্ট করতে Model এর save()
মেথড ব্যবহার করুন:
namespace App\Controllers;
use App\Models\ProductModel;
class ProductController extends BaseController
{
public function create()
{
$model = new ProductModel();
$data = [
'name' => 'Laptop',
'description' => 'High-performance laptop',
'price' => 1200.50
];
$model->save($data);
return "Data inserted successfully!";
}
}
ফর্ম ডেটা গ্রহণ করে ইনসার্ট করতে:
public function create()
{
$model = new ProductModel();
$data = [
'name' => $this->request->getPost('name'),
'description' => $this->request->getPost('description'),
'price' => $this->request->getPost('price')
];
$model->save($data);
return redirect()->to('/products');
}
Model এর findAll()
মেথড ব্যবহার করে সমস্ত ডেটা রিট্রিভ করুন:
public function index()
{
$model = new ProductModel();
$data['products'] = $model->findAll();
return view('product_list', $data);
}
find($id)
মেথড ব্যবহার করে নির্দিষ্ট একটি রেকর্ড রিট্রিভ করা যায়:
public function show($id)
{
$model = new ProductModel();
$data['product'] = $model->find($id);
return view('product_details', $data);
}
Model এর update()
মেথড ব্যবহার করে ডেটা আপডেট করুন:
public function update($id)
{
$model = new ProductModel();
$data = [
'name' => 'Updated Laptop',
'description' => 'Updated description',
'price' => 1300.00
];
$model->update($id, $data);
return "Data updated successfully!";
}
ফর্ম ডেটা গ্রহণ করে আপডেট করতে:
public function update($id)
{
$model = new ProductModel();
$data = [
'name' => $this->request->getPost('name'),
'description' => $this->request->getPost('description'),
'price' => $this->request->getPost('price')
];
$model->update($id, $data);
return redirect()->to('/products');
}
Model এর delete()
মেথড ব্যবহার করে ডেটা ডিলিট করুন:
public function delete($id)
{
$model = new ProductModel();
$model->delete($id);
return "Data deleted successfully!";
}
সমস্ত ডেটা ডিলিট করতে:
public function deleteAll()
{
$model = new ProductModel();
$model->truncate();
return "All data deleted!";
}
product_list.php
(ডেটা প্রদর্শন)<h1>Product List</h1>
<ul>
<?php foreach ($products as $product): ?>
<li>
<?= $product['name']; ?> - $<?= $product['price']; ?>
<a href="/product/edit/<?= $product['id']; ?>">Edit</a>
<a href="/product/delete/<?= $product['id']; ?>">Delete</a>
</li>
<?php endforeach; ?>
</ul>
product_form.php
(ডেটা ইনসার্ট/আপডেট)<form action="/product/save" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="<?= old('name', $product['name'] ?? ''); ?>">
<label for="description">Description:</label>
<textarea id="description" name="description"><?= old('description', $product['description'] ?? ''); ?></textarea>
<label for="price">Price:</label>
<input type="text" id="price" name="price" value="<?= old('price', $product['price'] ?? ''); ?>">
<button type="submit">Save</button>
</form>
CodeIgniter এর CRUD অপারেশন ডাটাবেস পরিচালনা দ্রুত এবং কার্যকরী করে। উপরের পদ্ধতি অনুসরণ করে সহজেই আপনার অ্যাপ্লিকেশনে ডেটা ইনসার্ট, রিট্রিভ, আপডেট এবং ডিলিট করতে পারবেন।
CodeIgniter এর Query Builder Class ডাটাবেসের সাথে কাজ করার একটি শক্তিশালী এবং সহজ উপায় প্রদান করে। এটি সহজ এবং জটিল উভয় ধরনের কোয়েরি সম্পাদন করতে পারে। JOIN অপারেশন ব্যবহার করে একাধিক টেবিল থেকে ডেটা রিট্রিভ করা যায়।
CodeIgniter এর Query Builder দিয়ে আপনি ডেটাবেসের বিভিন্ন কাজ যেমন সিলেক্ট, ইনসার্ট, আপডেট এবং ডিলিট করতে পারেন। নিচে কয়েকটি উদাহরণ দেওয়া হলো।
$builder = $db->table('users');
$query = $builder->get(); // SELECT * FROM users
$builder = $db->table('users');
$builder->select('name, email');
$query = $builder->get(); // SELECT name, email FROM users
$builder = $db->table('users');
$builder->where('status', 'active');
$query = $builder->get(); // SELECT * FROM users WHERE status = 'active'
$builder = $db->table('users');
$builder->orderBy('created_at', 'DESC')->limit(10);
$query = $builder->get(); // SELECT * FROM users ORDER BY created_at DESC LIMIT 10
JOIN ব্যবহার করে একাধিক টেবিল থেকে ডেটা রিট্রিভ করা হয়।
$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id');
$query = $builder->get();
জেনারেট করা SQL:
SELECT orders.id, orders.amount, users.name
FROM orders
INNER JOIN users ON users.id = orders.user_id
$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id', 'left');
$query = $builder->get();
জেনারেট করা SQL:
SELECT orders.id, orders.amount, users.name
FROM orders
LEFT JOIN users ON users.id = orders.user_id
$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name');
$builder->join('users', 'users.id = orders.user_id', 'right');
$query = $builder->get();
জেনারেট করা SQL:
SELECT orders.id, orders.amount, users.name
FROM orders
RIGHT JOIN users ON users.id = orders.user_id
$builder = $db->table('orders');
$builder->select('SUM(amount) as total_sales');
$query = $builder->get();
জেনারেট করা SQL:
SELECT SUM(amount) as total_sales FROM orders
$builder = $db->table('orders');
$builder->select('orders.id, orders.amount, users.name, products.title');
$builder->join('users', 'users.id = orders.user_id');
$builder->join('products', 'products.id = orders.product_id');
$query = $builder->get();
জেনারেট করা SQL:
SELECT orders.id, orders.amount, users.name, products.title
FROM orders
INNER JOIN users ON users.id = orders.user_id
INNER JOIN products ON products.id = orders.product_id
$subquery = $db->table('orders')->select('SUM(amount)')->where('user_id = users.id');
$builder = $db->table('users');
$builder->select('users.name, (' . $subquery . ') as total_spent');
$query = $builder->get();
জেনারেট করা SQL:
SELECT users.name, (SELECT SUM(amount) FROM orders WHERE user_id = users.id) as total_spent
FROM users
$builder = $db->table('orders');
$builder->select('user_id, COUNT(id) as total_orders');
$builder->groupBy('user_id');
$query = $builder->get();
জেনারেট করা SQL:
SELECT user_id, COUNT(id) as total_orders
FROM orders
GROUP BY user_id
$builder = $db->table('orders');
$builder->select('user_id, COUNT(id) as total_orders');
$builder->groupBy('user_id');
$builder->having('total_orders >', 5);
$query = $builder->get();
জেনারেট করা SQL:
SELECT user_id, COUNT(id) as total_orders
FROM orders
GROUP BY user_id
HAVING total_orders > 5
কখনো কখনো Query Builder ব্যবহার না করে সরাসরি Raw SQL কোড চালাতে হয়।
$query = $db->query("SELECT * FROM users WHERE status = 'active'");
$result = $query->getResult();
CodeIgniter এর Query Builder ব্যবহার করে Complex Query এবং JOIN পরিচালনা সহজ এবং কার্যকর। এর সাহায্যে আপনি ডাটাবেসের বিভিন্ন অপারেশন দ্রুত এবং নিরাপদে সম্পন্ন করতে পারবেন।
Transactions এবং Stored Procedures ডাটাবেস অপারেশন পরিচালনার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ উপাদান। এগুলো একাধিক ডাটাবেস অপারেশন পরিচালনার সময় ডেটার সঠিকতা এবং সুরক্ষা নিশ্চিত করে। CodeIgniter ফ্রেমওয়ার্কে Transactions এবং Stored Procedures সহজে পরিচালনার জন্য বিভিন্ন টুল এবং মেথড সরবরাহ করা হয়েছে।
Transaction হলো একাধিক ডাটাবেস অপারেশনকে একটি একক অপারেশন হিসেবে পরিচালনার একটি পদ্ধতি। যদি সমস্ত অপারেশন সফল হয়, তবে পরিবর্তনগুলো স্থায়ী হয় (commit)। আর যদি কোনো একটি অপারেশন ব্যর্থ হয়, তবে সবকিছু পূর্বাবস্থায় ফিরে যায় (rollback)।
CodeIgniter এ Transactions পরিচালনার জন্য trans_start()
, trans_complete()
, trans_commit()
এবং trans_rollback()
মেথডগুলো ব্যবহার করা হয়।
$this->db->trans_start(); // Transaction শুরু
$this->db->insert('accounts', ['name' => 'John', 'balance' => 5000]);
$this->db->update('accounts', ['balance' => 4000], ['id' => 2]);
$this->db->trans_complete(); // Transaction শেষ
trans_complete()
স্বয়ংক্রিয়ভাবে commit করবে।$this->db->trans_begin(); // Transaction শুরু
$this->db->insert('accounts', ['name' => 'Doe', 'balance' => 3000]);
$this->db->update('accounts', ['balance' => 2000], ['id' => 3]);
if ($this->db->trans_status() === FALSE) {
$this->db->trans_rollback(); // ব্যর্থ হলে Rollback
} else {
$this->db->trans_commit(); // সফল হলে Commit
}
trans_start()
এবং trans_complete()
উদাহরণ:
$this->db->trans_start();
$this->db->insert('users', $data);
$this->db->trans_complete();
trans_begin()
উদাহরণ:
$this->db->trans_begin();
trans_commit()
উদাহরণ:
$this->db->trans_commit();
trans_rollback()
উদাহরণ:
$this->db->trans_rollback();
trans_status()
উদাহরণ:
if ($this->db->trans_status() === FALSE) {
// Rollback logic
}
Stored Procedure হলো ডাটাবেসে সংরক্ষিত এক বা একাধিক SQL কোয়েরির একটি সেট, যা নির্দিষ্ট কাজ সম্পাদনের জন্য ব্যবহার করা হয়। এটি ডাটাবেসে প্রি-কম্পাইলড থাকে এবং সরাসরি সার্ভার থেকে কার্যকর হয়, ফলে কর্মক্ষমতা বাড়ে।
CodeIgniter এ Stored Procedure ব্যবহার করতে query()
বা callable
স্টেটমেন্ট ব্যবহার করা হয়।
MySQL-এ একটি Stored Procedure তৈরি করুন:
DELIMITER //
CREATE PROCEDURE GetUserById (IN userId INT)
BEGIN
SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;
Stored Procedure কল করার জন্য query()
মেথড ব্যবহার করা হয়:
$userId = 1;
$query = $this->db->query("CALL GetUserById(?)", [$userId]);
$result = $query->result();
print_r($result);
$query = $this->db->query("CALL GetUserById(?)", [$userId]);
DELIMITER //
CREATE PROCEDURE GetTotalUsers (OUT total INT)
BEGIN
SELECT COUNT(*) INTO total FROM users;
END //
DELIMITER ;
CodeIgniter থেকে কল:
$query = $this->db->query("CALL GetTotalUsers(@total)");
$result = $this->db->query("SELECT @total AS total");
print_r($result->row()->total);
CodeIgniter এ Transactions এবং Stored Procedures একত্রে ব্যবহার করে শক্তিশালী, কার্যকর, এবং সুরক্ষিত ডাটাবেস অপারেশন নিশ্চিত করা যায়। এগুলো বড় মাপের অ্যাপ্লিকেশনের জন্য অত্যন্ত কার্যকর।
Read more