Eloquent ORM trong Laravel 8

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 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 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ó.

Bình luận