MVC的M與Laravel 的M有何不同

閱讀時間約 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
查看全部
發表第一個留言支持創作者!
進入物件導向設計的實戰階段,我們通過建立人力資源管理功能來實踐理論知識。透過這些實作練習,能夠深化對物件導向概念的理解,並學會如何在實際開發中應用這些概念。
在物件導向程式設計的進階階段,學生將學習繼承、介面、抽象類別等核心概念。繼承允許類別共享屬性和方法,介面確保實現類別提供特定的方法實現,而抽象類別定義了基本結構供子類別擴展。這些知識點有助於提升程式碼的重用性、擴展性和維護性。
本階段深掘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
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
PHP是一個功能豐富且靈活的語言,用於開發動態和互動性強的網站。本文介紹了PHP的主要功能和用途,以及它的優點和特性。不論你是一個初學者還是一個專業的開發人員,PHP都是一個值得學習和使用的強大工具。
Thumbnail
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
在本章節中,我們探討了 PHP 中如何引用和管理套件。學習了如何使用 Composer 來安裝第三方套件,以及如何引用自定義模組。此外,我們還介紹了如何創建和使用自定義套件,並列舉了一些在 PHP 社群中常見且廣泛使用的套件和庫。通過掌握這些知識,開發者可以更有效地管理和利用各種資源。
Thumbnail
這一章節旨在介紹 PHP 中的物件導向編程(OOP)概念。通過詳細講解類別、建構子、訪問修飾符(公開、私有、受保護)、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda 表達式、泛型和反射等概念,使讀者能夠理解和應用這些 OOP 技術來編寫更具結構性和可維護性的 PHP 代碼。
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
本章節旨在介紹如何在不同操作系統上安裝和配置PHP環境,並使用命令行工具進行基礎操作。此外,還介紹了使用Visual Studio Code進行PHP開發的步驟,包括安裝擴展和設置調試環境。
Thumbnail
這個章節介紹了PHP的基本特性和應用領域,並且列舉了使用PHP的知名公司和網站。了解PHP的簡單易學、跨平台、嵌入HTML等特性,以及PHP在動態網站、電子商務、內容管理系統、社交媒體平台、數據庫管理和API開發中的應用。
Thumbnail
※ 視圖模板 視圖模板(View Templates) 是在 MVC 架構中負責展示數據的 HTML 文件,包含模板語法,用於在渲染時插入實際數據。它們的主要目的是分離數據與展示邏輯,讓代碼更加模塊化和易於維護。 視圖模板設計和使用的核心理念,就是「重複的事情不要重複做、效益最大化、有效利用資源
PHP(Hypertext Preprocessor)是一種流行的開源腳本語言,特別適用於網頁開發。它具有簡單的語法和易於理解的程式碼結構,並且支持多種數據庫系統和其他技術和框架集成。本文將介紹PHP的主要特點和廣泛應用性。
Thumbnail
PHP是一個功能豐富且靈活的語言,用於開發動態和互動性強的網站。本文介紹了PHP的主要功能和用途,以及它的優點和特性。不論你是一個初學者還是一個專業的開發人員,PHP都是一個值得學習和使用的強大工具。
Thumbnail
本文紀錄了MVC和MVVM的差異,包括各自的優缺點和最大差異,並討論了MVVM的商業邏輯應該寫在哪的問題。
Migration在 Laravel 中是一種用來管理資料庫結構變更的機制。它的主要目的是使開發者能夠在應用程序的不同環境中保持資料庫結構的一致性,並輕鬆地進行結構變更