Ở bài trước thì chúng ta đã tìm hiểu về addAttributeToFilter rồi, ở bài hôm nay tôi sẽ hướng dẫn các bạn về các hàm xử lý dữ liệu trong Magento 2.
Các hàm xử lý dữ liệu trong Magento 2
Các hàm xử lý dữ liệu ở đây là các hàm dùng để sắp xếp, filter…collection trong Magento 2. Thực ra thì sau cùng chúng cũng render ra các mã SQL như WHERE, ORDER BY, LIMIT… thôi, nhưng Magento 2 hỗ trợ cho chúng ta các hàm này nên chúng ta không cần phải viết các câu truy vấn SQL phức tạp nữa và quá trình làm việc cũng trở nên dễ dàng hơn nhiều.
setPageSize trong Magento 2
Hàm này giống với LIMIT trong SQL dùng để giới hạn dữ liệu của collection mà chúng ta muốn lấy. Ví dụ bên dưới tôi chỉ muốn lấy 5 sản phẩm từ product collection thôi nên tôi sẽ sử dụng hàm setPageSize và truyền vào một đối số kiểu int chính là số sản phẩm mà tôi muốn lấy.
1 2 |
$collection = $this->collectionFactory->create(); $collection->setPageSize(5); |

Tôi sẽ lấy được 5 record từ đoạn code trên và đây là câu truy vấn SQL của collection trên.
1 |
SELECT `e`.* FROM `catalog_product_entity` AS `e` LIMIT 5 |
addAttributeToSelect trong Magento 2
Như bạn đã biết thì Magento 2 sử dụng mô hình EAV nên khi chúng ta get collection thì Magento sẽ join các bảng lại với nhau và lấy ra tất cả record mà chúng ta yêu cầu. Nhưng nếu các bạn để ý kỹ thì khi get collection của product thì nó chỉ lấy được một số record mặc định. Ví dụ:
1 2 3 4 |
$collection = $this->collectionFactory->create()->setPageSize(1); echo '<pre>'; print_r($collection->getData()); echo '</pre>'; |
Ở trên tôi đã get collection của product và in dữ liệu của chúng ra màn hình.

Và đây là câu truy vấn SQL tôi lấy được từ đoạn code trên:
1 |
SELECT `e`.* FROM `catalog_product_entity` AS `e` |
Khi các bạn get collection thì mặc định chúng chỉ lấy dữ liệu của bảng catalog_product_entity.

Để lấy các attribute khác thì các bạn phải sử dụng addAttributeToSelect và truyền vào các attribute mà bạn muốn lấy thêm. Ví dụ tôi muốn lấy thêm attribute là price và name thì tôi sử dụng như sau:
1 2 3 4 |
$collection = $this->collectionFactory->create(); $collection->addAttributeToSelect('name') ->addAttributeToSelect('price'); return $collection; |

Nếu bạn muốn lấy tất cả attribute của collection thì bạn hãy truyền vào dấu sao addAttributeToSelect(‘*’).
addAttributeToSort trong Magento 2
Hàm này được dùng để sắp xếp theo các column có trong trong collection, tương tự như ORDER BY trong SQL. Hàm này sẽ nhận 2 đối số, đầu tiên là column dùng để sắp xếp, thứ 2 là thứ tự sắp xếp tăng dần(ASC) hay giảm dần(DESC). Ví dụ tôi muốn sắp xếp sản phẩm của tôi theo entity_id và giảm dần thì code của tôi như sau:
1 2 3 |
$collection = $this->collectionFactory->create(); $collection->addAttributeToSelect('name'); $collection->addAttributeToSort('entity_id', 'DESC'); |
Và đây là kết quả của đoạn code trên.

Và bên dưới là câu truy vấn SQL cho collection trên.
1 |
SELECT `e`.* FROM `catalog_product_entity` AS `e` ORDER BY `e`.`entity_id` DESC |
addAttributeToFilter trong Magento 2
Hàm này dùng để filter collection tương tự như câu lệnh WHERE trong SQL. Vì tôi đã có viết một bài viết về addAttributeToFilter rồi nên các bạn có thể xem lại.
addAttributeToFilter trong Magento 2
Kết luận
Vừa rồi tôi đã hướng dẫn cho các bạn các hàm thường được sử dụng để xử lý dữ liệu trong Magento 2. Hy vọng bài viết có thể giúp ích cho các bạn mới học về Magento 2. Thanks.