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 上,傳送門如下:
我要留言