Chuyển tới nội dung
Trang chủ » Model, Resource Model và Collection trong Magento 2

Model, Resource Model và Collection trong Magento 2

Models là một phần quan trọng trong mô hình MVC. Trong Magento 2 Models sẽ chịu trách nhiệm làm việc với database, và được chia thành ba phần là Model, Resource Model và Collection. Được sử dụng để làm việc với các hoạt động CRUD(create, read, update, delete), bạn không cần phải viết bất kỳ một dòng code SQL nào nữa.

Trước khi đi vào nội dung chính của bài viết, tôi sẽ tạo một bảng có tên helloworld_post nằm trong module ViMagento_HelloWorld với các column như sau:

  • post_id: khóa chính và tự động tăng
  • name
  • status
  • content
  • created_at

Đầu tiên tạo file ViMagento/HelloWorld/etc/db_schema.xml

Sau đó chạy câu lệnh php bin/magento setup:upgrade để tạo bảng

 

Tạo Model trong Magento 2

Tạo file: ViMagento/HelloWorld/Model/Post.php

Một Model thì sẽ extends class AbstractModel và nó gọi phương thức _init và truyền vào một Resource Model như là một đối số để lấy thông tin từ cơ sở dữ liệu. Model sẽ làm việc với cơ sở dữ liệu thông qua resource model.

Tạo Resource Model trong Magento 2

Tạo file: ViMagento/HelloWorld/Model/ResourceModel/Post.php

Resource Model sẽ extends class AbstractDb, gọi phương thức _init và truyền vào hai đối số là tên bảng của bạn và khóa chính của bảng. Model sẽ chứa logic tổng thể làm việc với database, nó không thực thi bất kì câu lệnh truy vấn SQL nào cả mà Resource Model sẽ làm điều đó. Resource Model sẽ làm việc trực tiếp với database CRUD(create, read, update, delete).

Tạo Collection trong Magento 2

Tạo file: ViMagento/HelloWorld/Model/ResourceModel/Post/Collection.php

Collection phải extends class AbstractCollection và truyền vào phương thức _init hai đối số là model và resource model chúng ta vừa tạo.

Cách sử dụng Model

Vừa rồi chúng ta đã cùng nhau tạo model, resource model và collection cho bảng helloworld_post. Vậy làm sao để sử dụng chúng nhỉ. Trong PHP hướng đối tượng phương thức Factory sẽ khởi tạo đối tượng thì trong Magento cũng tương tự như vậy. Để sử dụng model chúng ta thêm Factory vào sau tên class. Ví dụ: PostFactory. Bạn không cần phải tạo class PostFactory nhé vì Magento sẽ tự động tạo nó cho bạn và được đặt trong thư mục generated. Trông như Magento đã tạo ra một bản nháp để làm việc ấy.

Để lấy một ví dụ thực tế mình sẽ tạo một controller và show dữ liệu ra ngoài màn hình nhé.

Tạo file: ViMagento/HelloWorld/Controller/Post/Index.php

Đây là dữ liệu trong bảng helloworld_post

Sử dụng model, resource model và collection để thao tác với dữ liệu trong Magento 2
Sử dụng model, resource model và collection để thao tác với dữ liệu trong Magento 2

Và khi truy cập vào đường dẫn đến controller vừa tạo ta sẽ lấy được dữ liệu có trong bảng helloworld_post. Cũng đơn giản phải không nào. example.com/helloworld/post/index

Sử dụng model, resource model và collection để thao tác với dữ liệu trong Magento 2
Sử dụng model, resource model và collection để thao tác với dữ liệu trong Magento 2

Kết luận

  • Model: Chứa logic tổng thể làm việc với database thông qua resource model
  • Resource model: Làm việc trực tiếp với database (CRUD)
  • Collection: Có thể get một tập hợp model. được sử dụng khi bạn muốn lấy nhiều dòng dữ liệu. Model chỉ có thể load 1 record thôi nhé.
  • Factory: Magento sẽ tự động tạo một class trong generated, các bạn cứ hiểu là Magento sẽ tạo một bản nháp và làm việc với nó. Ví dụ: PostFactory, CollectionFactory…

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *