MVC的M與Laravel 的M有何不同

更新於 2024/08/05閱讀時間約 5 分鐘

這個問題在剛學laravel 的朋友都會提到的問題,基於這個命題,我覺得可以再定義清楚,不然MVC這麼多種,又要怎麼比較 所以我們來一個完整的提問 >>

codeigniter MVC架構與laravel 框架的差別?



這裡的 Codeigniter 是 CodeIgniter 3,雖然 CodeIgniter 4以前就開始有ORM,到CodeIgniter 4之後有更完善ORM概念,但就我知道的使用CI的開發者還是習慣使用 $db→query('SQL語法', [參數])


所以…不免俗的我們要來比較一下,CodeIgniter 3 與 Laravel 框架的差別,,但我們還是會著重在 M 這個概念

架構與設計

  1. 架構風格:
    • CodeIgniter 3: 輕量級框架,偏向於簡單、快速的應用開發。提供了基本的 MVC (Model-View-Controller) 結構,但沒有強制開發者遵循特定的設計模式,靈活性高。
    • Laravel: 完整的現代 PHP 框架,強調優雅的語法和開發體驗。基於 MVC 架構,並且包含許多內建的工具和套件,如 Eloquent ORM、Blade 模板引擎、任務排程、事件系統等。
  2. 學習曲線:
    • CodeIgniter 3: 學習曲線較低,對新手友善,適合小型或快速開發的專案。
    • Laravel: 功能強大,但相對複雜,學習曲線較陡。適合中大型專案,或需要較多內建功能和擴展能力的應用。

MVC 架構中的 Model 差異

  1. CodeIgniter 3 的 Model:
    <?php

    class User_model extends CI_Model {
    public function get_users() {
    $query = $this→db→get('users');
    return $query→result();
    }
    }
    • 定義方式: 通常繼承 CI_Model 類別,開發者可以在 Model 中定義資料表查詢和業務邏輯。
    • 資料庫操作: 使用 CodeIgniter 自帶的 Active Record 查詢構造器,簡化了 SQL 查詢的書寫。
  2. Laravel 的 Model:
    <?php

    use Illuminate\Database\Eloquent\Model;

    class User extends Model {
    // 指定表名
    protected $table = 'users';

    // 自動填充屬性
    protected $fillable = ['name', 'email', 'password'];
    }
    • 定義方式: 通常繼承 Illuminate\Database\Eloquent\Model 類別,使用 Eloquent ORM 提供的功能來進行資料庫操作。
    • 資料庫操作: Eloquent ORM 是 Active Record 模式的實現,提供豐富的查詢構造器和關聯關係處理。


MVC 的 M (Model) 與 Eloquent Models 的比較

  1. 資料表映射:
    • CodeIgniter: 開發者需要手動配置和使用資料表,不提供自動映射。
    • Laravel: Eloquent 自動將 Model 類別與資料表對應,預設根據類別名推斷表名,且可以自定義。
  2. 關聯關係:
    • CodeIgniter: 沒有內建的關聯關係支持,需自行編寫邏輯處理。
    • Laravel: Eloquent 提供簡單易用的關聯方法(如 hasMany、belongsTo 等),支持一對一、一對多、多對多等關係。
  3. 資料庫遷移:
    • CodeIgniter: 沒有內建的資料庫遷移系統,需使用第三方工具或自行管理。
    • Laravel: 提供強大的資料庫遷移和種子工具,便於版本控制和自動化部署。
  4. 查詢構造器:
    • CodeIgniter: 使用 Active Record,查詢語法簡潔,但功能較為基礎。
    • Laravel: Eloquent 提供豐富的查詢構造器功能,並且可以鏈式調用,支持複雜查詢。



從開發的角度來看,CodeIgniter 3 是個簡單好上手的 MVC 框架,非常適合小型專案和需要快速開發的情況。它的彈性高,學習曲線也比較平緩,對新手來說很友善。相較之下,Laravel 則是功能強大且擴展性高的現代 PHP 框架,更適合中大型專案或需要豐富內建功能的應用。Laravel 的學習曲線較陡,但一旦掌握後,能大大提升開發效率。

在 Model 的實現上,CodeIgniter 的 Model 主要是自己手動配置資料表,適合簡單的查詢操作。而 Laravel 的 Eloquent ORM 則提供了自動映射資料表的功能,支持各種關聯關係和複雜的查詢,讓開發者可以更方便地處理資料庫操作。

總結來說,CodeIgniter 3 適合想要快速上手和簡單開發的開發者,而 Laravel 則適合追求高效能和擴展性的開發團隊。如果你的專案需求較為複雜,Laravel 會是更好的選擇;如果只是做個簡單的網站,CodeIgniter 3 會讓你輕鬆不少。

但...小孩才做選擇!兩個都學不就行了~

這是一系列以軟體開發為主題的輕鬆分享,內容涵蓋了技術選擇、開發經驗、實戰應用等多方面的議題。無論是如何在眾多框架中做出選擇,還是如何應對技術轉移的挑戰,這裡有幽默、有趣的對話風格,將複雜的技術問題轉化為易懂的故事。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本階段深掘PHP中類別與物件的應用,從基本定義到屬性與方法的運用,並特別著重於訪問控制和靜態成員的概念。學生將學會如何有效地利用公開、保護、私有屬性,以及如何在不實例化的情況下透過類別名稱直接訪問靜態屬性和方法,進一步鞏固物件導向程式設計的核心知識。
本階段介紹物件導向程式設計(OOP)基礎,從OOP概念、類別與物件基本原理,到PHP中類別與物件的應用,並深入探討封裝、繼承等OOP特性,最後以實際練習加強理解。此階段為學生掌握PHP OOP打下堅實基礎。
從基本的OOP概念、PHP基礎回顧,到類別與物件的深入探討、進階概念如繼承、介面與抽象類別,再到實戰應用與設計模式入門,最後以課程總結與未來學習資源提供作結。此課程架構確保學生能夠從基礎到進階,全面掌握PHP物件導向程式設計的核心概念與技術。
本篇文章為Laravel初學者提供了一個指南,深入探討了Laravel的routes目錄下的功能。文章詳細描述了web.php和api.php的差異和使用情境,並簡要介紹了console.php和channels.php的功能。透過這篇文章,讀者可以更好地理解和利用Laravel的路由功能。
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
在PHP中可以用$this、self、與static代表自己這個類別,有些人可能搞不清楚他們的區別,尤其是self、與static,但是他們各別有自己的意義和用法,在實戰中這些些微的差別可能就會造成不可預期的問題,本文仔細說明了他們之間的差別。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
PHP是一個功能豐富且靈活的語言,用於開發動態和互動性強的網站。本文介紹了PHP的主要功能和用途,以及它的優點和特性。不論你是一個初學者還是一個專業的開發人員,PHP都是一個值得學習和使用的強大工具。
Thumbnail
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
Thumbnail
在PHP中可以用$this、self、與static代表自己這個類別,有些人可能搞不清楚他們的區別,尤其是self、與static,但是他們各別有自己的意義和用法,在實戰中這些些微的差別可能就會造成不可預期的問題,本文仔細說明了他們之間的差別。
Thumbnail
Codeigniter如果不調整設定,網址中會自帶index.php,為了符合MVC架構,通常會將它去除,本文將詳細說明處理步驟。
Thumbnail
有的時候,會希望在物件導向中對原生的Class新增功能的時候,大多我們都會寫一個新的class並繼承。 但是其實Laravel提供了一個不同的方式,讓我們可以在常用的Class上,直接新增想要的function,那就是macro。
Thumbnail
PHP是一個功能豐富且靈活的語言,用於開發動態和互動性強的網站。本文介紹了PHP的主要功能和用途,以及它的優點和特性。不論你是一個初學者還是一個專業的開發人員,PHP都是一個值得學習和使用的強大工具。
Thumbnail
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更