Như các bạn đã biết thì Laravel hỗ trợ cho chúng ta nhiều cách để tương tác với cơ sở dữ liệu. Và eloquent ORM là một thế mạnh rất lớn Laravel có trong khi các framework không hỗ trợ. Bài giảng này sẽ trình bày một số nội dung cơ bản về Eloquent ORM trong Laravel, mời các bạn cùng tham khảo.
Trang 1Eloquent ORM
Nguyễn Hữu Thể
PHÁT TRIỂN PHẦN MỀM NGUỒN MỞ
Trang 3− 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ươngtá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
Trang 4Đị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
Trang 5Eloquent Model: Cấu trúc class
Trang 6Eloquent Model: Liên kết model với table
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
protected $table = 'my_flights'; }
Sử dụng thuộc tính: $table
Trang 7Eloquent Model: Primary Keys
• Eloquent cũng coi mỗi table có một column là primary key
• 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
Trang 8Eloquent Model: Timestamps
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:
Trang 9Tấ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:
Trang 10Lấ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;
}
Trang 11Cá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
Trang 12Ví dụ
Table sanpham đã được tạo trong bài Migration SanPham
Trang 13Ví dụ - Tạo model sanpham
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()" ; } );
Trang 14Ví dụ - Test model sanphamTest
Trang 15Ví 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;
} );
Trang 16Ví dụ - Save model sanpham
Trang 17Ví dụ - Save model sanpham
Trang 18Ví dụ - Load all model sanpham
// all
Route::get ( 'model/sanpham/all' , function () {
$sanpham = App\SanPham::all()->toJson();
echo $sanpham;
} );
Trang 19Ví dụ - Print Array
// Array
Route::get ( 'model/sanpham/all' , function () {
$sanpham = App\SanPham::all()->toArray();
var_dump($sanpham);
} );
Trang 20Ví 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 );
} );
Trang 21Ví 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' ];
} );
Trang 22Xóa
// Xóa sản phẩm
Route::get ( 'model/sanpham/delete' , function () {
App\SanPham::destroy(4); } );
Trang 23Thê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();
Trang 24Cậ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();
Trang 25Xóa Model
− Để xóa một model, gọi hàm delete trong model instance
$flight = App\Flight::find(1);
$flight->delete();