文章彙整

Magento 2 ORM 架構淺談 (1)

By Astral Web 11 months agoNo Comments
首頁  /  Magento  /  Magento-2  /  Magento 2 ORM 架構淺談 (1)

Magento 2 ORM

Magento 是一個包裝非常完整的 Framework ,除了實踐了許多設計模式( Design Pattern )的精神,也還有一些其他的 Pattern 在裡面,像是 ORM 的架構就是其中的一種,那我們今天就一起來了解 ORM 在 Magento 2 裡面有哪些好用的方法吧!

章節

Magento 2 ORM 架構淺談 (1)

Magento 2 ORM 架構淺談 (2)

Magento 2 ORM 架構淺談 (3)

 

執行環境:

Ubuntu Linux 16.04

PhpStorm 2017.3

(好拉,其實跟環境沒關係。。)

 

1.什麼是 ORM :

ORM,全名是 Object-Relational Mapping ( 對象關係映射 ),是一種程式設計模式,用於實現物件導向語言裡不同類型系統的資料之間的轉換。它的作用是在關聯資料庫數據庫和實體( Entity )之間作一個封裝,這樣,我們在具體的操作 Object 的時候,就不需要再去和複雜的 SQL 語句打交道,只需簡單的操作對象的 Property和 Method。

 

2.什麼時候需要使用 ORM:

在開發期間,常常會與資料庫做互動,無論是在 Controller、View、Model 裡面,都會有可能使用到資料庫四大功能:新增 ( Inser t)、刪除( Delete )、查詢( Select )、修改( Update ),而透過 ORM 幫我們封裝好的方法,就能夠快速的取得我們想要的資料,或是達到我們想要對資料庫做的操作。

 

3.Magento 內 Model 建立:

想要使用方便的 ORM 架構,必須先從建立資料表(Table)及 Model 開始,建立資料表超過本章的教學範圍,故先從 Model 開始講起。在 Magento 2 架構中,一張資料表原則以對應到一個 Model 為主(當然你想要多個也可以),在建立 Model 的時候,需要產生 三個檔案,以我們的 Model 名稱 Employee 為例,三個 Class 分別如下:

 

(1) Vender\Module\Model\Employee:

<?php

namespace Astralweb\ORM\Model;

use \Magento\Framework\Model\AbstractModel;

class Employee extends AbstractModel
{


   /**
    * Initialize resource model
    * @return void
    */
   public function _construct()
   {
       $this->_init('Astralweb\ORM\Model\ResourceModel\Employee');
   }


}

 


(2) Vender\Module\Model\ResourceModel\Employee:

<?php

namespace Astralweb\ORM\Model\ResourceModel;

use \Magento\Framework\Model\ResourceModel\Db\AbstractDb;

class Employee extends AbstractDb
{
   /**
    * Initialize resource
    *
    * @return void
    */
   public function _construct()
   {
       $this->_init('employee_entity', 'entity_id');
   }
}

 

 

(3) Vender\Module\Model\ResourceModel\Employee:

<?php


namespace Astralweb\ORM\Model\ResourceModel\Employee;

use \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;

class Collection extends AbstractCollection
{
   /**
    * Initialize resource collection
    *
    * @return void
    */
   public function _construct()
   {
       $this->_init('Astralweb\ORM\Model\Employee', 'Astralweb\ORM\Model\ResourceModel\Employee');
   }
}

 

4.取得 ORM Collection:

Magnento 2 中若要取得 Collection 來操作 ORM 的話,有兩種方式,第一種是先宣告 Model Entity ,由 Entity 中使用 getCollection() 的方法取得,第二種是直接建立一個 Collection Class,我們來看以下兩種在宣告上的差異。

 

(1)宣告Model Entity方式:

<?php

/*
        * Object Manager 是為了示範上較為方便
        * 官方是較不建議這麼做的
        * 在實作過程中,應該使用 DI 的方式注入
        * */
       /* @var $employeeEntity \Astralweb\ORM\Model\Employee */
       $objectManager = ObjectManager::getInstance();
       $employeeEntity = $objectManager->get('Astralweb\ORM\Model\Employee');
       $employeeCollection = $employeeEntity->getCollection();

 

(2)宣告Collection 方式:

       /* @var $employeeCollection \Astralweb\ORM\Model\ResourceModel\Employee\Collection */
       $objectManager = ObjectManager::getInstance();
       $employeeCollection = $objectManager->get('Astralweb\ORM\Model\ResourceModel\Employee\Collection');


 

在取得 Collection 之後,就可以開始對 ORM 資料表進行操作了,剩下的操作細節,我們留至下一篇會有更詳盡的說明!

以上範例程式皆放在 Github 上,傳送門如下:Github

想要學習更多Magento相關知識,請參考:Magento 教學導覽

 

以上內容由Astralweb 歐斯瑞編寫製作

 000

推薦文章

Category:
  Magento-2

留下回應

你的電子郵件地址不會被公開.

取得獨家電子商務祕技

建立更好的策略靈感

跟上全球的網路趨勢

絕佳的電商解決方案

電子商務戰略全指南

每月發送電商戰略指南,只要填寫E-mail即可訂閱!

請到您的信箱確認,即可完成訂閱。