Eloquent in Laravel 5.8

min read

Day 19 #100DaysOfCode

Vừa qua mình đã xem tới Query Builder xong rồi, giờ đi tìm hiểu về Eloquent trong Laravel 5.8
Eloquent là một chức năng rất đặt biệt trong Laravel, giúp chúng ta thao tác truy vấn dữ liệu. Eloquent là ActiveRecord ORM , có nghĩa là nó là một lớp trù tượng cơ sở dữ liệu(database abstraction), để thao tác được nhiều loại cở sở dữ liệu.
Ví dụ: Tôi tạo một class model "Product" để truy vấn table "products" trong database
Mở CMD lên chạy câu lệnh migration để tạo class model trên, các bạn có thể xem lại tại đây: Model in Laravel 5.8 

php artisan make:model Product 

+ app\Product.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model{
     protected $fillable=["name","email","phone","address","image","user_id"];
 }
?>

Sử dụng phương thức all() để lấy toàn bộ data trong table "products"

+ app\Http\Controllers\ProductsController.php : ta cần thêm "use App\Product" đến controller "ProductsController.php"

- Hiện thị tất cả dữ liệu với cú pháp sau

// app/Http/Controllers/ProductsController.php
 $products = Product::all();

hoặc ta có thể dùng phương thức take(),skip() để lấy dữ liệu theo limit

$products = Product::skip(2)->take(4)->get();
 //Phương thức orderBy() 
 $products = Product::orderBy("id","desc")->skip(2)->take(4)->get();
 //Phương thức where()
 $products = Product::where("id",">",3)->orderBy("id","desc")->get();

 return view('home')->with(array("data"=>$products));

Ở bên trên bạn thấy mình return về view("home") để thiển thị dữ liệu ra cho người dùng xem

// views/home.blade.php
 @foreach($data as $item)
    {{$item->name}}
 @endforeach

- Phương thức save() dưới đây, giúp ta lưu record vào cơ sở dữ liệu, khác với cách lưu record của Query Builder đúng không nào! ở Query builder thì sử dụng phương thức insert() để lưu

// app/Http/Controllers/ProductsController.php 
use Carbon\Carbon;
use App\Product;
public function store(Request $request)
    {
        // add product
        $product = new Product;
        $product->name = $request->name;
        $product->phone = $request->phone;
        $product->email = $request->email;
        $product->address = $request->address;
        $product->image = $request->image;
        $product->user_id = 1;
        $product->created_at = Carbon::now('Asia/Ho_Chi_Minh');
        $product->updated_at = Carbon::now('Asia/Ho_Chi_Minh');
        $product->save();
    }

Hơn nửa bạn có thể thêm dữ liệu theo cách sao đây

 $product = new Product([
            "name"=>"Văn Kiệt",
            "phone"=>"321453535",
            "email"=>"xxx999999993@gmail.com",
            "address"=>"HCM",
            "image"=>"",
            "user_id"=>1,
            "created_at"=>Carbon::now('Asia/Ho_Chi_Minh'),
            "updated_at"=>Carbon::now('Asia/Ho_Chi_Minh')

        ]);
        $product->save();

Hoặc thêm bằng phương thức make()

 $product = Product::make([
            "name"=>"Văn Kiệt",
            "phone"=>"321453535",
            "email"=>"xxx9999999936@gmail.com",
            "address"=>"HCM",
            "image"=>"",
            "user_id"=>1,
            "created_at"=>Carbon::now('Asia/Ho_Chi_Minh'),
            "updated_at"=>Carbon::now('Asia/Ho_Chi_Minh')

        ]);
        $product->save();

- phương thức findOrFail() thường dùng để truy vấn tới một id cụ thể

 public function show($id)
    {
       $product = Product::findOrFail($id);
        return Response()->json(array("product"=>$product));
    }

- Chỉnh sửa một record trong cơ sở dữ liệu

public function update(Request $request, $id)  
    {
        $product = Product::find($id);
        $product->name =$request->name;
        $product->save();
    }

- Xóa record

public function destroy($id)
    {
        $product = Product::find($id);
        $product->delete(); 
        //hoặc
        Product::destroy($id);
        //hoặc delete list id 
        Product::destroy([1, 5, 7]);
        //
        Product::where('updated_at', '<', now()->subYear())->delete();
    }

- Một số phương thức khác như : 

    $count = Product::where("created_at",">",now()->subDay())->count();
    $sum = Product::sum("price");
    $avg = Product::avg("price");

 

x

Ủng hộ tôi bằng cách click vào quảng cáo. Để tôi có kinh phí tiếp tục phát triển Website!(Support me by clicking on the ad. Let me have the money to continue developing the Website!)