iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
自我挑戰組

我推的Laravel系列 第 6

【Day-5】我推的Laravel-基礎篇-MVC與MVC的M

  • 分享至 

  • xImage
  •  

MVC

簡介

MVC也並不是Laravel專屬
MVC主要是分化程式的職責,想像一下,今天使用者在網頁上登入,而登入的畫面程式邏輯取得資料庫都在同一個.php檔案中,會有甚麼問題?

  1. 維護難度 - 程式可讀性太低,耦合性太高
  2. 測試 - 無法對單一功能實作測試案例
  3. 程式重用性低 - 舉例來說連接資料庫,今天登入要寫、訂單頁面也要寫,明明是同一個功能,卻重複寫,而且如果一個邏輯改了,可能要檢查的檔案就很多
  4. 違反單一職責原則(Single Responsibility Principle) - 這是SOLID的設計原則中的S,以後有機會介紹,現在先記住,這是軟體工程的設計風格之一

以上還不是全部,但你也看出來這種大雜燴的方式並不是一個好的設計模式

MVC分別是

  • M - 取得資料庫 - Model:資料庫定義、關聯...等
  • V - 畫面 - View:視覺圖,可以理解為前端,主要是使用者操作的介面
  • C - 程式邏輯 - Controller:控制器,程式邏輯,開始你的表演的地方

Laravel已經為我們做了很多,例如連接資料庫、Blade(前端View)、還有諸多底層套件與語法糖(Illuminate)等
我們只要享受開發所帶來的快樂就好了

Model & Migration

連結資料庫

在這之前,先確認有寫資料庫連線設定,在**.env**

https://ithelp.ithome.com.tw/upload/images/20230920/20163286Whhgeflh4Z.jpg

  • DB_CONNECTION : 連線種類,一般有mysql、pgsql等
  • DB_HOST : 主機IP or 網址
  • DB_PORT : 連接port mysql一般為3306
  • DB_DATABASE : 資料庫名稱
  • DB_USERNAME : 資料庫使用者
  • DB_PASSWORD : 資料庫密碼

如果你使用laragon,在創建專案時就會順便幫你建立資料庫名稱專案名稱的資料庫了
預設使用者為root 密碼為空(跟上圖一樣

Migration

創建Post Model,-cm代表同時創建Controller和Migration(Controller下次再介紹

php artisan make:model Post -cm

Migration 是用來創建資料表的定義

https://ithelp.ithome.com.tw/upload/images/20230920/20163286UGWVp9BHyE.png

Migration 目錄: database\migrations

https://ithelp.ithome.com.tw/upload/images/20230920/20163286xaUd280ylM.jpg

Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->bigInteger('user_id')->default(0)->comment('關聯使用者')->index();
    $table->text('title');
    $table->text('content');
    $table->integer('views')->default(0)->comment('觀看數');
    $table->timestamps();
    $table->softDeletes();
});

這是我簡單寫的範例,接下來在終端中輸入:

php artisan migrate

https://ithelp.ithome.com.tw/upload/images/20230920/20163286vO3cypn5pq.jpg

前面幾項是Laravel自帶,暫時先不刪掉

再回到資料庫就可以看到資料表已經建立完囉
https://ithelp.ithome.com.tw/upload/images/20230920/20163286qxTYl7BrzE.jpg

Model

Model的目錄在app\Models

https://ithelp.ithome.com.tw/upload/images/20230920/20163286YrAK7Zmm2n.jpg

現在先維持它乾乾淨淨的樣子,之後會很多用到它的情境
先記住它是用來定義資料庫的關係

舉例來說,Laravel支援跨資料庫
https://ithelp.ithome.com.tw/upload/images/20230920/201632862kXeB62tpn.jpg

更多方式可以看這裡

總結

這次我們了解的MVC的美妙,並透過簡單的設定和指令,連接資料庫並定義且創建了資料表
下次我們先把View放後面,從Controller先介紹起

汽車在早期制定的標準化流程,每個工人在自己的崗位上專注做一件事,進而提升效率,同理也可以用於MVC架構 - 筆者Ryan Wu


上一篇
【Day-4】我推的Laravel-基礎篇-正式進入Laravel的世界!路由、RESTful API
下一篇
【Day-6】我推的Laravel-基礎篇-MVC的C
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言