Magento 2 ORM 架構淺談 (3)
在上一次的文章中,我們介紹了Collection 中 Select 子句的應用,接下來要介紹的是使用 Model 操作新增(Insert)、修改(Update)及刪除(delete)的方法。
章節
Magento 2 ORM 架構淺談 (3)
1.什麼是 Model :
Model 在 Magento 內可以說是一個 實體( Entity ),無論是新增、修改、及刪除的方法,都可以透過 Entity 來操作。
2.取得 Model 的方式:
在第一篇的文章裡面,我們有提到兩種方式可以取得 Collection ,一種是宣告 Model,透過 getCollection() 的 Method 來取得,另外一種就是直接宣告 Colleciton 類別。而我們今天要使用的 Model ,就是透過宣告 Model 的方式來取得(疑?很抽象嗎?我們用程式來說明吧!)
<?php /* * Object Manager 是為了示範上較為方便 * 官方是較不建議這麼做的 * 在實作過程中,應該使用 DI 的方式注入 * */ /* @var $employeeEntity \Astralweb\ORM\Model\Employee */ $objectManager = ObjectManager::getInstance(); $employeeEntity = $objectManager->get('Astralweb\ORM\Model\Employee');
3.使用 Model 新增資料
需要新增資料,使用addData() 方法即可,最後要記得使用save()方法,這樣才會真正存入資料庫內(切記!)
/* * 新增 (Insert) 資料 * */ $employeeEntity = $objectManager->get('Astralweb\ORM\Model\Employee'); $employeeEntity->addData([ 'name' => '歐斯瑞', 'department' => '工程部', 'age' => '18', 'gender' => '男', 'id' => 'A123456789', 'phone' => '02-27926381', ])->save();
4.使用 Model 刪除資料
刪除資料有兩種方式,如果已經知道 刪除資料的 id ,可以直接使用load()方法,帶入 id 的值,接著使用delete() 方法刪除資料
/* * 刪除 (delete) 資料 * */ $employeeEntity = $objectManager->get('Astralweb\ORM\Model\Employee'); $employeeEntity->load(1)->delete();
如果要刪除多筆資料,並且配合查詢子句的話,就要使用第二種方法,一樣是透過 Collection 下完查詢條件後刪除,程式範例如下:
/* 使用collection 方法刪除*/ /* @var $employees \Astralweb\ORM\Model\Employee[] */ $employees = $employeeCollection ->addFieldToSelect('*') ->addFieldToSelect('gender', '男') ->getItems(); foreach ($employees as $employee) { $employee->delete(); }
5.使用 Model 更新資料
下面範例是使用Model 修改 entityId 等於 1 的資料,如果是多筆資料需要更改,也可以使用 Collection 的方法
/* * 更新(update)資料 * */ $employeeEntity = $objectManager->get('Astralweb\ORM\Model\Employee'); $employeeEntity ->load(1) ->setData([ 'name' => '歐斯瑞', 'department' => '工程部', ])->save();
大致上介紹到這邊,以上這三篇就是使用 Magento 透過 ORM 的方法來操作資料庫,如果你會了此方法,以後就可以不用純 SQL 來執行唷,不但增加了程式的閱讀性及維護性,也大幅提升了程式的安全性,是防止 SQL Injection 攻擊的好方法
以上範例程式皆放在 Github 上,傳送門如下:
我要留言