Laravel 8 cung cấp 2 kiểu truy vấn phổ biến với database là Eloquent ORM và Query Builder. Nếu như Query Builder làm việc trực tiếp với với database thông qua các tủy vấn thì Eloquent ORM lại sử dụng Model để tương tác với Database. Trong bài viết này chúng ta sẽ tìm hiểu về Eloquent ORM trong Laravel 8 và cách sử dụng Model trong Laravel 8 luôn các bạn nhé.
1. Eloquent ORM là gì?
ORM(Object Relational Mapping) đây là tên gọi chỉ việc ánh xạ các record dữ liệu trong hệ quản trị cơ sở dữ liệu sang dạng đối tượng mà mã nguồn đang định dạng trong class.
Eloquent ORM: Là một giải pháp tương tác với cơ sở dữ liệu sử dụng kỹ thuật ORM giúp lập trình viên thao tác dễ dàng hơn với DB.
Eloquent Model (Model) - là model thao tác trực tiếp với DB, xử lý logic nghiệp vụ và trả về dữ liệu cho controller.
Eloquent ORM trong Laravel 8 sử dụng các Model để tương tác với cơ sở dữ liệu, thông thường mỗi bảng của database sẽ được ánh xạ qua ‘Model’, và model này được sử dụng để tương tác với bảng.
2. Cách gọi Model.
Giả sử chúng ta tạo ra model Truyencuatui để quản lý dữ liệu của bảng truyencuatui
Bảng truyencuatui gồm các trường như sau
Tạo model truyencuatui
php artisan make:model Truyencuatui
Chúng ta khai báo như sau
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Truyencuatui extends Model
{
protected $table = 'truyencuatui';
protected $timestamps = false;
}
Để gọi Model trong Controllers
Bắt buộc chúng ta phải gọi namespace của model đó trong Controllers.
Ví dụ mình tạo 1 controller truyencontroller dùng để quản lý việc thêm sửa xóa truyện vào database.
php artisan make:controller truyencontroller --resource
Muốn gọi Model truyencuatui trong truyencontroller chúng ta phải khai báo namespace của model
use App\Models\truyencuatui;
Lúc này code truyencontroller như sau
<?php namespace App\Http\Controllers; use App\Models\truyencuatui; use Illuminate\Http\Request; class truyencontroller extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } }
Nếu không khai báo ( gọi namespace ) từ đầu khi gọi model chúng ta phải gọi cả namespace.
App\Models\Truyencuatui ::something
Còn nếu muốn gọi model trong Route thì các bạn không cần gọi namespace mà các bạn có thể dùng luôn với cú pháp.
App\TenModel::someThing;
VD: mình muốn gọi Model Truyencuatui trong route.
App\Models\Truyencuatui ::something
3. Các câu truy vấn hay dùng trong Eloquent ORM.
Chú ý: Tất cả các cú pháp dưới đây mình lấy model Truyencuatui làm mẫu nhé
a. Lấy ra dữ liệu trong bảng.
Lấy ra tất cả dữ liệu trong bảng.
Truyencuatui::all();
Để minh họa ví dụ này chúng ta tạo dùng controller truyencontroller.php ở trên để lấy dữ liệu truyền đến view.
Thêm đoạn code sau vào function index ()
public function index()
{
$truyen = Truyencuatui ::all();
return view('list_truyen',['list_truyen'=>$truyen]);
}
Để hiển thị dữ liệu chúng ta tạo view có tên list_truyen.blade.php trong resources\views với nội dung như sau:
<html> <head> <title>List Truyện</title> </head> <body> <table border = 1> <tr> <td>ID</td> <td>Tên Truyện</td> <td>Tác Giả</td> <td>Số Chương</td> </tr> @foreach ($list_truyen as $truyen) <tr> <td>{{ $truyen->id}}</td> <td>{{ $truyen->tentruyen}}</td> <td>{{ $truyen->tacgia}}</td> <td>{{ $truyen->chap}}</td> </tr> @endforeach </table> </body> </html>
Đừng quên khai báo route list_truyen trong routes/web.php
Route::get('list_truyen',[truyencontroller::class,'index']);
Xong rồi chúng ta cùng xem kết quả nhé:
http://localhost:8000/list_truyen
b. Lấy ra một dòng dữ liệu thông qua khóa chính.
Truyencuatui::find(1);
Hoặc
Truyencuatui::take(1)->get();
c. Truy vấn điều kiện.
Bằng:
Truyencuatui::where('id', 5)->get();
Lớn hơn, nhỏ hơn,.. (giống Query Buider)
Truyencuatui::where('id', '>', '5')->get(); Truyencuatui::where('id', '<', '5')->get();
d. Chọn cột dữ liệu.
Truyencuatui::select('id', 'tentruyen')->get();
e. Đếm dữ liệu.
Truyencuatui::all()->count();
f. Thêm dữ liệu.
$news = new Truyencuatui(); $news->tentruyen= "Chiên Thiên Giới"; $news->save();
Ở trên mình đã thêm vào cột tentruyen nội dung là 'Chiên Thiên Giới'
g. Sửa dữ liệu.
Ví Dụ mình muốn sửa tentruyen của bảng truyencuatui có id =1.
$update= Truyencuatui::find(1); $update->name= 'Phục Thiên Thị'; $update->save();
Hoặc
Truyencuatui::where('id', 1)->update(['tentruyen' => 'Phục Thiên Thị']);
h. Xóa
Cách 1:
$del_truyen= Truyencuatui::find(1); $del_truyen->delete();
Cách 2:
Truyencuatui::destroy(1);
//or
Truyencuatui::destroy(1, 2);
//or
Truyencuatui::destroy([1, 2, 3]);
//or
Truyencuatui::destroy(array(1, 2, 3));
Trong đó: 1, 2, 3 là các id(primary) của bảng cần truy vấn.
Cách 3:
Truyencuatui::where('id', 1)->delete();
3. Lời kết.
Phần trên mình đã trình bày cho các bạn về Eloquent ORM trong Laravel 8 rồi, đây là một phần cũng rất là quan trọng trong project nên mình mong các bạn cố gắng đọc cho kĩ để hiểu hơn về nó.