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");