Bài giảng Phát triển phần mềm nguồn mở - Bài 12: Eloquent ORM - Nguyễn Hữu Thể

Eloquent

− Cung cấp một API ActiveRecord đơn giản và tuyệt

vời khi làm việc với database.

• Mỗi database table sẽ có một "Model" tương ứng để tương

tác với table đó.

• Model cho phép bạn query dữ liệu trong table, cũng như

chèn thêm các dữ liệu mới.

pdf 25 trang phuongnguyen 7660
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển phần mềm nguồn mở - Bài 12: Eloquent ORM - Nguyễn Hữu Thể", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phát triển phần mềm nguồn mở - Bài 12: Eloquent ORM - Nguyễn Hữu Thể

Bài giảng Phát triển phần mềm nguồn mở - Bài 12: Eloquent ORM - Nguyễn Hữu Thể
PHÁT TRIỂN PHẦN MỀM NGUỒN MỞ
 Eloquent ORM
 Nguyễn Hữu Thể
 Eloquent
❖ Introduction
❖ Defining Models
❖ Retrieving Models
❖ Inserting & Updating Models
 • Inserts
 • Updates
❖ Deleting Models
 • Soft Deleting
 2
 Eloquent
− Cung cấp một API ActiveRecord đơn giản và tuyệt
 vời khi làm việc với database.
 • Mỗi database table sẽ có một "Model" tương ứng để tương
 tác với table đó.
 • Model cho phép bạn query dữ liệu trong table, cũng như
 chèn thêm các dữ liệu mới.
 3
 Định nghĩa Models
− Model nằm trong thư mục app/, có thể tuỳ chỉnh trong file
 composer.json.
− Kế thừa từ class Illuminate\Database\Eloquent\Model.
− Câu lệnh một model có tên Flight:
 php artisan make:model Flight
− Nếu muốn tạo database migration đi kèm với model thì sử
 dụng them cờ --migration hoặc -m:
 php artisan make:model Flight –migration
 Hoặc
 php artisan make:model Flight -m
 4
 Eloquent Model: Cấu trúc class
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
 //
}
 5
 Eloquent Model: Liên kết model với table
Sử dụng thuộc tính: $table
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
 //Kết nối model với table có tên my_flights
 protected $table = 'my_flights'; 
}
 6
 Eloquent Model: Primary Keys
• Eloquent cũng coi mỗi table có một column là primary key 
 tên là id. 
 • Chúng ta có thể định nghĩa một $primaryKey để đổi tên 
 column này.
 Ví dụ: $primaryKey = 'userid'
• Ngoài ra, Eloquent cũng coi primary key là một giá trị nguyên 
 tăng dần. 
 • Nếu muốn sử dụng primary không tăng dần hay không 
 phải là dạng số, cần thay đổi thuộc tính 
 $incrementing = false.
 7
 Eloquent Model: Timestamps
• Mặc định, Eloquent cần hai cột created_at và updated_at 
 có mặt trong các bảng. 
• Nếu bạn không muốn, thiết lập thuộc tính $timestamps 
 trong model thành false:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
 protected $table = 'my_flights'; 
 public $timestamps = false; //Tắt/bật chế độ tự động quản lý 
 ‘created_at’ và ‘update_at’ nếu table có dùng 2 thuộc tính có tên này.
}
 8
 Kết nối database
Tất cả các Eloquent model sẽ sử dụng kết nối database mặc 
định được cấu hình. Nếu bạn muốn sử dụng một kết nối khác 
cho model, sử dụng thuộc tính $connection:
 namespace App;
 use Illuminate\Database\Eloquent\Model;
 class Flight extends Model
 {
 protected $connection = 'connection-name';
 }
 9
 Lấy nhiều Models
Khi đã tạo được một model và đã liên kết đến table, 
bạn có thể sẵn sàng truy xuất dữ liệu từ database. 
use App\Flight;
$flights = App\Flight::all();
foreach ($flights as $flight)
{
 echo $flight->name;
}
 10
 Các phương thức trong model
Cho trước class model User:
$user = new User(); Tạo 1 biến đối tượng thuộc lớp Model đã có
echo $user->name; Lấy giá trị thuộc tính của model
$user = User::all(); Lấy toàn bộ dữ liệu trong table
$user = User::find(giá trị khóa chính); Tìm user theo khóa chính
$user->toJson(); Trả dữ liệu kiểu JSON
$user->save(); Lưu (hoặc cập nhật) dữ liệu từ model vào table
$user->delete(); Xóa dữ liệu trong table
User::destroy(giá trị khóa chính); Xóa dữ liệu bằng khóa chính 
trong table
 11
 Ví dụ
Table sanpham đã được tạo trong bài Migration SanPham
 12
 Ví dụ - Tạo model sanpham
 C:\xampp\htdocs\laravelk>php artisan make:model SanPham
 Model created successfully.
namespace App; Route::get ( 'model/sanpham/save', function
use () {
Illuminate\Database\Eloquent\Model; $sanpham = new App\SanPham();
class SanPham extends Model{ $sanpham->ten = "Galaxy S7";
 protected $table = "sanpham"; $sanpham->soluong = 100;
 $sanpham->save();
 //Tắt timestamp trong table 
 echo "Đã save()";
 public $timestamps = false;
 } );
}
 13
 Ví dụ - Test model sanpham
Test
 14
 Ví dụ - Save model sanpham
// Save có tham số
Route::get ( 'model/sanpham/save/{ten}', function ($ten) {
 $sanpham = new App\SanPham ();
 $sanpham->ten = $ten;
 $sanpham->soluong = 100;
 $sanpham->save ();
 echo "Đã save() " . $ten;
} );
 15
Ví dụ - Save model sanpham
 16
Ví dụ - Save model sanpham
 17
 Ví dụ - Load all model sanpham
// all
Route::get ( 'model/sanpham/all', function () {
 $sanpham = App\SanPham::all()->toJson();
 echo $sanpham;
} );
 18
 Ví dụ - Print Array
// Array
Route::get ( 'model/sanpham/all', function () {
 $sanpham = App\SanPham::all()->toArray();
 var_dump($sanpham);
} );
 19
 Ví dụ - Get Data
// Lấy sản phẩm có tên = "IPhone 7"
Route::get ( 'model/sanpham/ten', function () {
 $sanpham = App\SanPham::where('ten','IPhone 7')->get()-
>toArray();
 var_dump ( $sanpham );
} );
 20
 Ví dụ - Get Data
// Lấy sản phẩm có tên = "IPhone 7"
Route::get ( 'model/sanpham/ten', function () {
 $sanpham = App\SanPham::where('ten','IPhone 7')-
>get()->toArray();
 echo $sanpham [0]['ten'];
} );
 21
 Xóa 
// Xóa sản phẩm
Route::get ( 'model/sanpham/delete', function () {
 App\SanPham::destroy(4);
} );
 22
 Thêm Models
− Để thêm dữ liệu mới vào database:
 • Tạo một model instance mới,
 • Thiết lập các attributes vào model rồi gọi hàm save()
 namespace App\Http\Controllers;
 use App\Flight;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 class FlightController extends Controller {
 public function store(Request $request) {
 // Validate the request...
 $flight = new Flight;
 $flight->name = $request->name;
 $flight->save();
 }
 } 23
 Cập nhật Model
− Hàm save() cũng được dùng để cập nhật model đã
 tồn tại sẵn trong database.
− Để update:
 • Lấy model instance ra trước,
 • Thay đổi các attribute,
 • Gọi hàm save()
 $flight = App\Flight::find(1);
 $flight->name = 'New Flight Name';
 $flight->save();
 24
 Xóa Model
− Để xóa một model, gọi hàm delete trong model instance
 $flight = App\Flight::find(1);
 $flight->delete();
 25

File đính kèm:

  • pdfbai_giang_phat_trien_phan_mem_nguon_mo_bai_12_eloquent_orm_n.pdf