Image

MVC的M與Laravel 的M有何不同

這個問題在剛學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 差異

CodeIgniter 3 的 Model

PHP
<?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 查詢的書寫。

Laravel 的 Model

    PHP
    <?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 會讓你輕鬆不少。

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