Eloquent ORM là gì

  • Laravel cơ bản

Laravel Eloquent ORM phần 1: Thao tác với database qua Eloquent Model

91,810 lượt xem
-
Viết bởi
FirebirD
-
Mar 28, 2017
15 bình luận
Share
Facebook
Twitter
Google+
Pinterest
WhatsApp

Trong bài viết trước chúng ta đã làm quen với Laravel Migration và Laravel Seeding là các công việc cần thiết khi làm việc với cơ sở dữ liệu giúp cho việc thiết kế kiến trúc và quản lý phiên bản cơ sở dữ liệu trở lên đơn giản. Như vậy, chúng ta đã có một cơ sở dữ liệu với đầy đủ các bảng các cột dữ liệu và có cả những dữ liệu test trong đó, trong phần tiếp theo này bạn sẽ được giới thiệu cách thức truy vấn và xử lý dữ liệu đang có trong cơ sở dữ liệu. Trước khi bắt đầu vào phần chính bài viết chúng ta sẽ điểm qua một số thuật ngữ sẽ sử dụng trong bài như "ORM là gì?", "mô hình MVC là gì?"

1. ORM là gì?

ORM [Object Relational Mapping] là một kỹ thuật lập trình dùng để chuyển đổi dữ liệu giữa một hệ thống không hướng đối tượng như cơ sở dữ liệu sang hệ thống hướng đối tượng như lập trình hướng đôi tượng trong PHP. Kỹ thuật này tạo ra các đối tượng CSDL ảo có thể được lập trình trong mã nguồn và có nhiều ưu điểm như mã nguồn trở lên rõ ràng và dễ bảo trì, dễ dàng thao tác với dữ liệu và thực hiện việc tối ưu hệ thống thông qua việc sử dụng bộ đệm... Các công việc khó hoặc không thể xử lý ở database layer sẽ được đưa lên lớp ứng dụng.

2. Mô hình MVC là gì?

Khái niệm này đã được nhắc đến trong Laravel Routing, định tuyến người dùng, ở đây chúng ta sẽ chỉ sơ lược lại đôi chút. MVC [Model - View - Controller] là mô hình phân chia ứng dụng thành 3 thành phần, mỗi thành phần có nhiệm vụ riêng:

  • Model chứa các logic nghiệp vụ và các thao tác với cơ sở dữ liệu.
  • View thực hiện các công việc hiển thị và tương tác với người dùng.
  • Controller làm nhiệm vụ điều hướng giữa các đối tượng tham gia hệ thống như điều hướng một yêu cầu từ người dùng [HTTP request chẳng hạn] đến cho một Model tương ứng xử lý sau đó kết quả trả về sẽ chuyển đến cho View để thực hiện các hiển thị và tương tác với người dùng cuối.

Áp dụng mô hình MVC giúp ứng dụng có thể module hóa rất rõ ràng, phát triển ứng dụng nhanh chóng và đặc biệt mã nguồn dễ bảo trì. Laravel là framework PHP áp dụng mô hình MVC, bài viết này của chúng ta sẽ tập trung ở phần Model là một trong những phần chính trong hệ thống core Laravel.

3. Các thuật ngữ liên quan đến cơ sở dữ liệu

Trong bài viết sẽ cố gắng dùng các thuật ngữ bằng tiếng Việt, tuy nhiên có một số thuật ngữ nếu viết bằng tiếng Việt khá dài hoặc không có một thuật ngữ tương tự trong tiếng Việt nên có lúc sử dụng cả thuật ngữ tiếng Anh. Danh sách các thuật ngữ cơ bản liên quan đến cơ sở dữ liệu: - Relational Database Management System [RDBMS]: hệ quản trị cơ sở dữ liệu quan hệ là các ứng dụng được phát triển bởi các nhà cung cấp, giúp tạo ra các cơ sở dữ liệu quan hệ và quản trị chúng. Ví dụ: MySQL, SQL Server là các hệ quản trị cơ sở dữ liệu quan hệ.

  • database: cơ sở dữ liệu là kho chứa dữ liệu, trong một hệ thống ứng dụng có thể sử dụng nhiều các database khác nhau.
  • table: bảng dữ liệu record: các bản ghi dữ liệu
  • relationship: mối quan hệ giữa các bảng dữ liệu.
  • index: tạo chỉ mục cho dữ liệu giúp truy vấn dữ liệu được nhanh chóng.
  • CRUD: viết tắt của Create, Read, Update, Delete là 4 thao tác cơ bản với một bản ghi.

4. Laravel Eloquent ORM

Với các thuật ngữ ở trên, chúng ta phần nào mường tượng được Laravel Eloquent ORM là gì?, vâng nó nói lên rằng Laravel đã sử dụng kỹ thuật ORM giúp lập trình viên thao tác dễ dàng hơn với cơ sở dữ liệu. Trong phần này chúng ta sẽ nói nhiều đến Laravel Eloquent Model [gọi tắt là Model] là một phần trong mô hình MVC ở trên, các Model này sẽ thao tác trực tiếp với cơ sở dữ liệu, xử lý các logic nghiệp vụ và trả dữ liệu về cho các Controller. Chúng ta sẽ lần lượt tìm hiểu cách thức tạo ra các Model và sử dụng chúng.

4.1 Tạo Model

Trong Laravel thông qua ORM mỗi bảng trong cơ sở dữ liệu sẽ là một Model, các hành động tương tác với CSDL sẽ được làm trên Model như truy vấn dữ liệu hay insert các bản ghi vào bảng... Các Model có thể được tạo ra thủ công bằng cách tạo file có phần mở rộng php hoặc tự động thông qua các câu lệnh artisan:

php artisan make:model Product

Khi đó nó sẽ tạo ra một lớp Product trong file Product.php nằm trong thư mục app.

4.2 Tạo Model cùng với file migrate

Một vấn đề đặt ra là khi bạn tạo Model nhưng bảng trong cơ sở dữ liệu chưa tồn tại thì sao? Ok, chúng ta sẽ phải thực hiện tạo một bảng mới thông qua Laravel Migration, Laravel cũng hỗ trợ bạn một cách tự động luôn là tạo Model kèm với file migrate luôn thông qua việc thêm tham số --migrate hoặc -m trong câu lệnh tạo Model:

php artisan make:model Product --migration php artisan make:model Product -m

4.3 Một số quy ước ngầm định của Eloquent Model

4.3.1 Ngầm định tên bảng

Mỗi Model sẽ được mapping với một bảng dưới cơ sở dữ liệu, Laravel ngầm định một Model sẽ được map với một bảng có tên chính là tên Model với dạng số nhiều trong tiếng Anh [thêm s hoặc ies] còn được gọi là tiêu chuẩn đặt tên Snake case. [Xem them Các tiêu chuẩn đặt tên trong lập trình]. Snake case ở đây sẽ biến một tên lớp dạng PascalCase sang tên bảng dạng underscore [gạch chân] và thêm số nhiều vào. Ví dụ Model Product ở trên sẽ tương ứng với bảng products. Nếu bạn muốn bỏ ngầm định này để map Model sang một bảng khác như my_products cũng rất đơn giản là sử dụng thuộc tính $table để khai báo.

Chủ Đề