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

Đị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

pdf26 trang | Chia sẻ: thanhle95 | Ngày: 03/07/2021 | Lượt xem: 113 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Phát triển phần mềm nguồn mở - Bài 13: Eloquent ORM - Nguyễn Hữu Thể, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Eloquent ORM Nguyễn Hữu Thể PHÁT TRIỂN PHẦN MỀM NGUỒN MỞ 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 5 namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { // } Eloquent Model: Liên kết model với table 6 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'; } Sử dụng thuộc tính: $table Eloquent Model: Primary Keys 7 • 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. Eloquent Model: Timestamps 8 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. } • 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: Kết nối database 9 namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { protected $connection = 'connection-name'; } 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: Các phương thức trong model 10 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 Lấy nhiều Models 11 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; } Thêm ràng buộc bổ sung 12 Tạo ràng buộc cho các query, sử dụng hàm get() để lấy kết quả: $flights = App\Flight::where('active', 1) ->orderBy('name', 'desc’) ->take(10) ->get(); Ví dụ 13 Table sanpham đã được tạo trong bài Migration SanPham Ví dụ - Tạo model sanpham 14 C:\xampp\htdocs\laravelk>php artisan make:model SanPham Model created successfully. namespace App; use Illuminate\Database\Eloquent\Model; class SanPham extends Model{ protected $table = "sanpham"; //Tắt timestamp trong table public $timestamps = false; } Route::get ( 'model/sanpham/save', function () { $sanpham = new App\SanPham(); $sanpham->ten = "Galaxy S7"; $sanpham->soluong = 100; $sanpham->save(); echo "Đã save()"; } ); Ví dụ - Test model sanpham 15 Test Ví dụ - Save model sanpham 16 // 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; } ); Ví dụ - Save model sanpham 17 Ví dụ - Save model sanpham 18 Ví dụ - Load all model sanpham 19 // all Route::get ( 'model/sanpham/all', function () { $sanpham = App\SanPham::all()->toJson(); echo $sanpham; } ); Ví dụ - Print Array 20 // Array Route::get ( 'model/sanpham/all', function () { $sanpham = App\SanPham::all()->toArray(); var_dump($sanpham); } ); Ví dụ - Get Data 21 // 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 ); } ); Ví dụ - Get Data 22 // 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']; } ); Xóa 23 // Xóa sản phẩm Route::get ( 'model/sanpham/delete', function () { App\SanPham::destroy(4); } ); 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() 24 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(); } } 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() 25 $flight = App\Flight::find(1); $flight->name = 'New Flight Name'; $flight->save(); Xóa Model − Để xóa một model, gọi hàm delete trong model instance 26 $flight = App\Flight::find(1); $flight->delete();