CodeIgniter 4 CRUD with MySQL
CRUD stands for Create, Read, Update, and Delete. CRUD operations are basic data manipulation for the database. INSERT query is used to insert data in the database . SELECT Query is used to select a data from the database. UPDATE Query is used to update a data in the database and Delete Query is used to delete a data from the database. In this example we will learn how we can create crud application in CodeIgniter 4.
Download & Configure CodeIgniter 4 Application.
Download the fresh version of CodeIgniter from https://codeigniter.com/download and unzip this in your working directory and configure the base url in app/Config/App.php.
public $baseURL = 'http://localhost:8080'; To public $baseURL = 'http://localhost/crud/public';
Configure Database And Create Table.
In this step we will create database crud and table products in the crud database.
CREATE TABLE `products` ( `product_id` int(11) NOT NULL AUTO_INCREMENT, `product` varchar(250) NOT NULL, `category` varchar(250) NOT NULL `price`bigint, `sku` varchar(150), `model` varchar(150), PRIMARY KEY (`product_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1
Now update the database credential in app/Config/Database.php.
public $default = [ 'DSN' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'crud', 'DBDriver' => 'MySQLi', 'DBPrefix' => '', 'pConnect' => false, 'DBDebug' => (ENVIRONMENT !== 'production'), 'cacheOn' => false, 'cacheDir' => '', 'charset' => 'utf8', 'DBCollat' => 'utf8_general_ci', 'swapPre' => '', 'encrypt' => false, 'compress' => false, 'strictOn' => false, 'failover' => [], 'port' => 3306, ];
Create Model.
The model is used to communicate with the products table. So create model ProductModel in the app/Models/ directory and put the below code.
<?php namespace App\Models; use CodeIgniter\Model; class ProductModel extends Model { protected $table = 'products'; protected $primaryKey = 'product_id'; protected $allowedFields = ['product', 'category','price','sku','model']; }
Create Controller.
In this step we will create a controller named as ProductController. So create controller in the app/Controllers directory and put the below code .
<?php namespace App\Controllers; use App\Models\ProductModel; use CodeIgniter\Controller; class ProductController extends Controller { private $product = '' ; public function __construct(){ $this->product = new ProductModel(); } // show product list public function index() { $session = session(); $data['products'] = $this->product->orderBy('product_id', 'DESC')->findAll(); return view('products',$data); } // insert data public function store() { $data = [ 'product' => $this->request->getVar('product'), 'category' => $this->request->getVar('category'), 'price' => $this->request->getVar('price'), 'sku' => $this->request->getVar('sku'), 'model' => $this->request->getVar('model'), ]; $this->product->insert($data); $session = session(); $session->setFlashdata('msg', 'Product Successfully Added'); return $this->response->redirect(site_url('/list')); } // show product by id public function edit($product_id){ $data['product'] = $this->product->where('product_id', $product_id)->first(); echo json_encode($data['product']); } // update product data public function update(){ $id = $this->request->getVar('id'); $data = [ 'product' => $this->request->getVar('product'), 'category' => $this->request->getVar('category'), 'price' => $this->request->getVar('price'), 'sku' => $this->request->getVar('sku'), 'model' => $this->request->getVar('model'), ]; $this->product->update($id, $data); return $this->response->redirect(site_url('/list')); } // delete product public function delete(){ $id = $this->request->getVar('delete_id'); $data['product'] = $this->product->where('product_id', $id)->delete($id); return $this->response->redirect(site_url('/list')); } }
Add below code in route inside the app/Config/Routes.php.
$routes->get('/', 'ProductController::index'); $routes->get('/list', 'ProductController::index'); $routes->post('add-product', 'ProductController::store'); $routes->get('edit-product/(:num)', 'ProductController::edit/$1'); $routes->post('update-product', 'ProductController::update'); $routes->post('delete-product', 'ProductController::delete');
Create View.
In this step post we will create a view inside the and app\Views directory named as products.php. So create a view file in the same directory and put the below code.
<html> <head> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css"> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="table-responsive"> <div class="table-wrapper"> <div class="table-title"> <div class="row"> <div class="col-sm-6"> <h2>Manage<b> Products</b></h2> </div> <div class="col-sm-6"> <a href="#addProductModal" class="btn btn-success" data-toggle="modal"><i class="material-icons"></i> <span>Add Product</span></a> </div> </div> </div> <table class="table table-striped table-hover"> <thead> <tr> <th>Product</th> <th>Categroy</th> <th>Price</th> <th>SKU</th> <th>Model</th> <th>Actions</th> </tr> </thead> <tbody> <?php foreach($products as $product) { ?> <tr> <td><?=$product['product']?></td> <td><?=$product['category']?></td> <td><?=$product['price']?></td> <td><?=$product['sku']?></td> <td><?=$product['model']?></td> <td> <a href="#editProductModal" data-id="<?=$product['product_id']?>"class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a> <a href="#deleteProductModal" data-delete_id="<?=$product['product_id']?>" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a> </td> </tr> <?php } ?> </tbody> </table> </div> </div> </div> <!-- Add Modal HTML --> <div id="addProductModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <form method ="post" action="<?= site_url('/add-product') ?>"> <div class="modal-header"> <h4 class="modal-title">Add Product</h4> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> </div> <div class="modal-body"> <div class="form-group"> <label>Product</label> <input type="text" name ="product" id = "product" class="form-control" required> </div> <div class="form-group"> <label>Categroy</label> <input type="text" name ="category" id = "category" class="form-control" required> </div> <div class="form-group"> <label>Price</label> <input type="number" name ="price" id ="price" class="form-control" required> </div> <div class="form-group"> <label>SKU</label> <input type="text" name ="sku" id = "sku" class="form-control" required> </div> <div class="form-group"> <label>Model</label> <input type="text" name ="model" name = "model" class="form-control" required> </div> </div> <div class="modal-footer"> <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel"> <input type="submit" class="btn btn-info" value="Save"> </div> </form> </div> </div> </div> <!-- Edit Modal HTML --> <div id="editProductModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <form method ="post" action="<?= site_url('/update-product') ?>"> <div class="modal-header"> <h4 class="modal-title">Update Product</h4> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> </div> <div class="modal-body"> <div class="form-group"> <label>Product</label> <input type="text" name ="product" id = "edit_product" class="form-control" required> </div> <div class="form-group"> <label>Categroy</label> <input type="text" name ="category" id = "edit_category" class="form-control" required> </div> <div class="form-group"> <label>Price</label> <input type="number" name ="price" id ="edit_price" class="form-control" required> </div> <div class="form-group"> <label>SKU</label> <input type="text" name ="sku" id = "edit_sku" class="form-control" required> </div> <div class="form-group"> <label>Model</label> <input type="text" name ="model" id = "edit_model" class="form-control" required> <input type="hidden" name ="id" id = "edit_id" required> </div> </div> <div class="modal-footer"> <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel"> <input type="submit" class="btn btn-info" value="Update"> </div> </form> </div> </div> </div> <!-- Delete Modal HTML --> <div id="deleteProductModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <form method ="post" action="<?= site_url('/delete-product') ?>"> <div class="modal-header"> <h4 class="modal-title">Delete Product</h4> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> </div> <div class="modal-body"> <p>Are you sure you want to delete these Records?</p> <p class="text-warning"><small>This action cannot be undone.</small></p> <input type="hidden" id="delete_id" name="delete_id"> </div> <div class="modal-footer"> <input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel"> <input type="submit" class="btn btn-danger" value="Delete"> </div> </form> </div> </div> </div> </body> </html>
Add some css in the above view file.
body { color: #566787; background: #f5f5f5; font-family: 'Varela Round', sans-serif; font-size: 13px; max-width:1540px } .table-responsive { margin: 30px 0; } .table-wrapper { background: #fff; padding: 20px 25px; border-radius: 3px; min-width: 1000px; box-shadow: 0 1px 1px rgba(0,0,0,.05); } .table-title { padding-bottom: 15px; background: #0397d6; color: #fff; padding: 16px 30px; min-width: 100%; margin: -20px -25px 10px; border-radius: 3px 3px 0 0; } .table-title h2 { margin: 5px 0 0; font-size: 24px; } .table-title .btn-group { float: right; } .table-title .btn { color: #fff; float: right; font-size: 13px; border: none; min-width: 50px; border-radius: 2px; border: none; outline: none !important; margin-left: 10px; } .table-title .btn i { float: left; font-size: 21px; margin-right: 5px; } .table-title .btn span { float: left; margin-top: 2px; } table.table tr th, table.table tr td { border-color: #e9e9e9; padding: 12px 15px; vertical-align: middle; } table.table tr th:first-child { width: 60px; } table.table tr th:last-child { width: 100px; } table.table-striped tbody tr:nth-of-type(odd) { background-color: #fcfcfc; } table.table-striped.table-hover tbody tr:hover { background: #f5f5f5; } table.table th i { font-size: 13px; margin: 0 5px; cursor: pointer; } table.table td:last-child i { opacity: 0.9; font-size: 22px; margin: 0 5px; } table.table td a { font-weight: bold; color: #566787; display: inline-block; text-decoration: none; outline: none !important; } table.table td a:hover { color: #2196F3; } table.table td a.edit { color: #FFC107; } table.table td a.delete { color: #F44336; } table.table td i { font-size: 19px; } table.table .avatar { border-radius: 50%; vertical-align: middle; margin-right: 10px; } /* Modal styles */ .modal .modal-dialog { max-width: 400px; } .modal .modal-header, .modal .modal-body, .modal .modal-footer { padding: 20px 30px; } .modal .modal-content { border-radius: 3px; font-size: 14px; } .modal .modal-footer { background: #ecf0f1; border-radius: 0 0 3px 3px; } .modal .modal-title { display: inline-block; } .modal .form-control { border-radius: 2px; box-shadow: none; border-color: #dddddd; } .modal textarea.form-control { resize: vertical; } .modal .btn { border-radius: 2px; min-width: 100px; } .modal form label { font-weight: normal; }
This is how our CodeIgniter crud application looks like.