# Laravel + Vue.js 入門筆記 ###### tags: `Laravel` ## Laravel + Vue.js 入門 - CRUD - 01 ### XAMPP 安裝 **XAMPP** | 單字 |意思 | | -------- | -------- | | x | 作業系統 (跨3個作業系統) | | a | apach | | m | MariaDB | | p | php | | p | perl | **這邊要注意:** 請不要將xampp作為架站工具,很容易被駭客入侵攻擊 xampp/htdocs => 可以放專案資料夾 **XAMPP下載路徑** https://www.apachefriends.org/zh_tw/download.html 下載完成後進入安裝的目錄, 將xampp設定為管理員開啟 ![](https://i.imgur.com/5IEz2xV.png) **Netstat:** 可以查詢port號是否被其他專案搶走, **例如:** IIS有正在執行的專案等 ![](https://i.imgur.com/iGIHQ41.png) 如果有被搶走則要更改port號,如果有重複的port被使用,可以進到裡面修正 ![](https://i.imgur.com/XlW5ZA5.png) ![](https://i.imgur.com/VXDLe0r.png) ![](https://i.imgur.com/kQOS7PX.png) ![](https://i.imgur.com/Jqy5Yxe.png) 回到XAMPP 點選左邊panel cocnfig,進入此面板 ![](https://i.imgur.com/VveIUJA.png) 將port設定剛剛設定的port號 ![](https://i.imgur.com/vVnMAb1.png) 儲存完成後重啟apach即可! ### 開啟phpMyAdmin admin 可開啟mysql管理介面 ![](https://i.imgur.com/vEnSGww.png) **常用頁籤** 瀏覽=> 紀錄的資料 第一個欄位通常都是id => Laravel 統一規定 欄位命名都是英文, 空白用底線代替 日期 => on 時間 => at 日期+時間 => at 結構=> 多少欄位, 及欄位屬性 鑰匙=>代表主鍵 , 空值null(不可) ,AUTO_INCREMENT(自動累加1), 更多(可以看到更多) 一個表 varchar 不能超過6535 (累加) , 這是規定 **類型** | Column 1 | Column 2 | | -------- | -------- | | varchar(255) | 動態儲存, 字元最大長度只有255字元 | | text | 沒有限定字元長度 | | datetime current_timestamp() | 當下時間碼 | **編碼** utf8mb4_general_ci => 可儲存表情符號 ![](https://i.imgur.com/nz2Ik1V.png) ![](https://i.imgur.com/iBXuEhB.png) 新增完左下角按儲存 匯出資料表要注意的地方 ![](https://i.imgur.com/JWilHXA.png) ### Laravel安裝 將專案安裝在xampp/htdocs底下 開啟常用的命令提示 ##### 指令 composer create-project --prefer-dist laravel/laravel="7.x" project_03 翻譯: 建立一個專案 / 想要的發行版本號 laravel=7.X / 專案名稱 ![](https://i.imgur.com/OOD5nmY.png) ### 安裝完成 開啟專案 在本機端做開啟 : http://localhost/project_03/public/ 但是通常不會有public,可以使用其他方式隱藏 ![](https://i.imgur.com/PLWedwZ.png) **常用指令** cd : 此資料夾 cd.. : 上一層資料夾路徑 cd xampp : 進入此資料夾 ls : 列出清單 laravel官網 https://laravel.tw/docs/5.3/installation --- ## Laravel + Vue.js 入門 - CRUD - 02 ### Larvel Laravel為"全端型MVC框架" #### Larvel路由位置 路由放置在routes/web.php ("在這裡的路由不能隨便做刪除") ![](https://i.imgur.com/n6tkpcS.png) ![](https://i.imgur.com/ldw9Qoj.png) #### Larvel套件管理器 packalyst套件管理器,與前端npm套件管理器雷同 https://packalyst.com/ --- #### 進入phpmyadmin資料庫 先前有設定了新的port號,因此要用先前的port號登入 http://localhost:83/phpmyadmin/ #### laravel 登入功能 ##### login 開放註冊表單: 一開出來沒有權限控管, 搜索引擎會被爬蟲抓到 ##### 忘記密碼 資料庫設定上編碼: mb4=>可以存取表情符號emoji utf8mb4_unicode_ci=>影響關係到排序 更大的unicode的字體集 ##### Laravel專案 env檔案(環境設定檔案)修改 | Column 1 | Column 2 | | -------- | -------- | | DB_CONNECTION=mysql | 資料庫名稱 | | DB_HOST=127.0.0.1 | 預設location,虛擬主機 | | DB_PORT=3306 | 預設host | | DB_DATABASE=project_03 | 專案名稱,資料庫名稱 | | DB_USERNAME=root | 不能這樣上線(測試可以這樣用) | | DB_PASSWORD= | 密碼(測試可以這樣用) | 備註: 上傳到github可能**不會有**env檔案,可以從env.example檔案複製過來做修正 ##### laravel 命名規則 建立資料庫的資料表, laravel命名習慣是使用小寫複數 laravel有一個翻譯器,會自動將資料庫和Laravel的APP做連結 只要設定好env檔案,因為MVC,所以會自動去抓資料對照表並且串連起來 https://webdevetc.com/blog/laravel-naming-conventions #### 資料庫 通常資料表這3個是固定並自動管理的,因此不需要管他 ![](https://i.imgur.com/dm8oJtt.png) 認證機制是內建的,因此users Table不需要手動增加 ##### 註冊完成後密碼會加密 ![](https://i.imgur.com/Wq7DklD.png) #### 安裝套件 ##### 安裝 LaravelUI ###### 指令 composer require laravel/ui --- **安裝上有遇到幾個問題因此做個紀錄: ** 1. laravel8.x 對應 UI 3.x 但是因為安裝的laravel是7.x版本 2.x 所以要降級 降級指令: **composer require laravel/ui:2.0** ![](https://i.imgur.com/0mN74CX.png) 2. 遇到版本太低 ![](https://i.imgur.com/gUCpvz9.png) 使用升等命令: composer selfupdate 3. 遇到內存不足 ![](https://i.imgur.com/hfYGeOf.png) 進入php.ini修改,存檔後重啟 ![](https://i.imgur.com/WOUuJFs.png) ![](https://i.imgur.com/1R54XzR.png) ##### 安裝 bootstrap -- auth php artisan => 針對app命令指令工具 ###### 指令 這邊使用最單純的裝法,指令: php artisan ui bootstrap --auth 安裝好後,需要重新編譯一次 ![](https://i.imgur.com/CoSooQ4.png) 但是這邊先引用CDN做快速開發, laravel是MVC框架,前端框架都放在resources資料夾裡面, 並且compiler完成後會打包成一個js檔案 剛安裝的認證機制auth都放在views裡面,尚未有UI resolve-url-loader=> 則放置(views) ![](https://i.imgur.com/ErBClYf.png) ![](https://i.imgur.com/9vGxv6a.png) laravel-mix,是用來打包前端框架 views/layouts/app.blade.php ![](https://i.imgur.com/iQYhNfl.png) 打包好的前端框架會產生一大包的app.js,因此會掛於asset('js/app.js') 因此在laravel的前端思路是使用webpack所打包出來的 在這邊引用CDN #### 將資料表傳進資料庫裏面(將資料表建立起來) **註冊表單** 指令: php artisan migrate migrate在laravel裡面意旨: 把資料表建立起來 位於: database/migrations,將裡面的資料轉換成sql語言並傳送至資料庫 ![](https://i.imgur.com/qloH6OM.png) routes: laravel路由 ![](https://i.imgur.com/jzaiEi0.png) **網址連結** 命名規則: https://webdevetc.com/ 官方網站: https://laravel.com/docs/7.x/frontend ## Laravel + Vue.js 入門 - CRUD - 03 https://www.facebook.com/Arthur.ShengBo.Chen/videos/10224374148718216/ 查詢php版本: 開啟命令提示字元 指令: php -v ![](https://i.imgur.com/Nild0QZ.png) **Laravel** MVC框架(module view controller) 1. 屬於restful Json架構 2. 上面的網址都是API(路由) **傳統的呼叫模式 (查詢字串)** ![](https://i.imgur.com/aHgrbBp.png) **現在的呼叫模式 restful (/格式設計)** 用斜線分隔名跟值 ![](https://i.imgur.com/gbQ6fvB.png) 因此laravel使用路由Route設計(網址 = api),所以要先設計路由 **大專案流程:** 資料庫>資料表先設計好再談route **設計四大方向:** 路由/資料模型/視圖/控制 模組module、路由router、視圖view、控制器controller **Larvral 自動化技術:** laravel命名規則方式必須要注意,因為有半自動化的機制,因此大小寫、單複數如果下錯,都會報錯 XAMPP要與php 同版本,否則會出錯 php artisan:查詢指令 compose 是作為管理php套件 **route** 列出內建路由: php artisan route:list ![](https://i.imgur.com/K8BxtJT.png) URI/Name: 半自動化機制命名 Action: 到Controller裡面的function Middleware: 認證機制是否有擋掉 **routes/web.php 為例: ** ![](https://i.imgur.com/oIRkQBJ.png) Auth:routes(); 位置: ![](https://i.imgur.com/iO8gwhG.png) 在此處單複數一定要相同,在此處User是一個特殊資料表,laraval指定要將它額外提出 從User.php檔案編譯後(php artisan migrate migrate)傳送至資料庫 如果要新建立的話,可以新建一個資料夾為Models,將新建的controller放置在此處,不要放在app底下,會很難管理 建立Models指令語法範例: php artisan make:model Http\Models\Person ![](https://i.imgur.com/zlKSULa.png) <br/> laravel目前使用blade樣板引擎,因此切板會在blade進行 storage: 快取檔案 ![](https://i.imgur.com/VbenX0U.png) <br/> **Laravel使用的引擎** Eloquent ORM: 自動串聯資料表資料庫,也就是說建立資料庫的連結,一種包裝語法 https://laravel.com/docs/8.x/eloquent Query Builder: 不管資料庫連結到哪個資料引擎,都是一模一樣 因此對SQL要有一定的基礎 **VSCODE外掛介紹** Favorites 參考文章 [MVC維基百科](https://zh.wikipedia.org/zh-tw/MVC) --- <br/> ## Laravel + Vue.js 入門 - CRUD - 04 **建立Controller** 1. 這邊以Person為範例,先在routes定義方法 ![](https://i.imgur.com/VDW44rn.png) 2. 建立控制器Controller 指令:php artisan make:controller PersonController (建立完成後會發現是空的頁面,此處指令要自己手動在Controller輸入) 指令:php artisan make:controller PersonController --resource (將7種方法都建立) ![](https://i.imgur.com/XAJfhDT.png) ![](https://i.imgur.com/7CUc76H.png) 定義參數的寫法,參考 https://github.com/laravel/framework/issues/19477 查詢是id是否有命名成功,指令:php artisan route:list ![](https://i.imgur.com/2vDRZJx.png) **views**: resources/views 要新增頁面的話建議要新增資料夾, 在這邊以persons為例子, 常例來說如果要新增方法(函式)則以方法命名 ![](https://i.imgur.com/V4gnLdd.png) laravel是動態樣板 laravel以blade為樣板引擎 樣板語言小抄: https://gist.github.com/CiprianSpiridon/f4d7fe0d8a51f0714b62 https://shortcode.dev/blade-cheatsheet https://learninglaravel.net/cheatsheet/ **補充:** vue,angule => javascript動態合併樣板 php => php動態合併樣板 pug => 靜態合併樣板 laravel動態合併樣版效能比較慢,所以會有快取機制,位於storage,將樣板做動態合併之後,放入storage/framework/cache裡面,才做上線, 所以執行的時候不見得是執行樣板檔案,執行的時候是執行樣板被快取之後的檔案,做為執行增加效率 如果是在views出錯,除錯的訊息都是放在storage裡面,指向會比較不明顯 如果是controller出錯,會比較明顯,會有行數提示 laravel流程: 從route呼叫網址=> 第一個順序會前往controller的Index, ![](https://i.imgur.com/QdvT2uJ.png) --- ## Laravel + Vue.js 入門 - CRUD - 05 laravel 為全端型的框架, 網站入口點從route進入,因此一開始都先從路由做設定,每一個路由都是一個網址 重心點都會在Controller,Models最少, 第二低是Views blade樣板引擎會將前端工程師撰寫的翻譯成php檔案 laravel 中文文檔 7.x https://learnku.com/docs/laravel/7.x <br/> **blade語法** @extends('layouts.app') => 套用母版 @section('content') => 填充 , @endsection(關閉@section,一定要有) @yield('content') => 套用內頁 if end if寫法: @if (session('success')) {{ session('success') }} @endif 補充: laravel裡面put/patch/delete是沒有頁面,使用的是post,並且是模擬出來的,因此如果是delete,則要使用form表單,並且使用偽造方法 @method('DELETE') ![](https://i.imgur.com/nU0qQAU.png) ![](https://i.imgur.com/1L7OdST.png) ![](https://i.imgur.com/9wGUepx.png) {{}} => 會被laravel引擎翻譯成字串,等同php echo的語法 {{ route('persons.destroy', [route指定的參數 => 指定id])}} route('函式', route指定的參數) []=>陣列簡寫 [''=>''] => 胖箭頭代表,陣列裡面的其中單一個元素 如果有兩個以上 => ['id'=>'123', 'id'=>'456'] 指定完成後F12會看到翻譯成字串 ![](https://i.imgur.com/8Dac59F.png) route文件: https://laravel.com/docs/8.x/helpers#methods-route 補充: action="導回指定的頁面",但是delete不能做導回自己的方法,只有get, head, post ![](https://i.imgur.com/qMFRXBY.png) @csrf => _token 產生一組與伺服端做比對的亂碼,讓安全性提升一些 ## Laravel + Vue.js 入門 - CRUD - 06 controller有三個功能: 1. 帶入model 2. 如何將model建立出一個資料集 3. 把資料集變成一個物件集合做一個顯示 controller是使用物件導向型的寫法 model載入至controller ![](https://i.imgur.com/T3LgvDh.png) 指定要串聯資料庫的名稱,這邊是強制示範 ![](https://i.imgur.com/V6BQiJm.png) 提取資料帶入新變數並顯示在頁面上 ![](https://i.imgur.com/6qjQVoo.png) blade語法套用在table表格 ![](https://i.imgur.com/mDsocR9.png) laravel,loop迴圈文件: https://laravel.com/docs/8.x/blade#loops route定義方式文件參考: https://laravel.com/docs/7.x/controllers#restful-partial-resource-routes ![](https://i.imgur.com/b4eaM1K.png) --- ## Laravel + Vue.js 入門 - CRUD - 07 helpers文件連結: https://laravel.com/docs/7.x/helpers https://laravel.com/docs/7.x/helpers#method-route blade 連結寫法 ![](https://i.imgur.com/lFPsE6b.png) middleware登入判斷 route文件連結: https://laravel.com/docs/7.x/routing#route-groups 第一種群體包法的方式: ![](https://i.imgur.com/9d3EnuU.png) 第二種方式: ![](https://i.imgur.com/Mib4O8A.png) ## Laravel + Vue.js 入門 - CRUD - 08 將接收到的值傳到前台 可以使用all()) ![](https://i.imgur.com/cVwuzYi.png) ![](https://i.imgur.com/SMsonNQ.png) **laravel已經有內建多國語系** 多國語系文件: https://laravel.com/docs/8.x/localization 自訂錯誤訊息文件: https://laravel.com/docs/7.x/validation#custom-error-messages $validator = Validator::make($input, $rules, $messages); input=> request表單所有的欄位,驗證的欄位傳入 rules=> 驗證的規則 message=> 回傳訊息 驗證邏輯: https://laravel.com/docs/7.x/validation#quick-writing-the-validation-logic ![](https://i.imgur.com/3KrMuFD.png) 顯示驗證訊息: https://laravel.com/docs/7.x/validation#quick-displaying-the-validation-errors 舊的值: https://laravel.com/docs/7.x/helpers#method-old 驗證流程寫法: 1. 控制器裡面載入驗證 ![](https://i.imgur.com/yfJkxE1.png) 2. 新建寫法 ![](https://i.imgur.com/3vEzsil.png) 3. blade前端接收 ![](https://i.imgur.com/O6FDB5z.png) ![](https://i.imgur.com/vaKVJrE.png) 4. 修改語言 laravel 語言包位置: ![](https://i.imgur.com/IDTgVe8.png) 改變整個網站語系: laravel語言設定位置 ![](https://i.imgur.com/0LSdopH.png) laravel語言定義位置 ![](https://i.imgur.com/MKQUt9l.png) ::attribute=> 代表會帶入前端name定義的值 ![](https://i.imgur.com/xCPyNO2.png) **laravel語言變換** 第一種方法: 新建一個中文資料夾,並新建定義的語言 第二種方法: 沿用英文的去做修改 第三種方法: 沿用英文,並用validation $message 去做修改 ![](https://i.imgur.com/nds3XMc.png) 驗證通過存進資料庫 ![](https://i.imgur.com/g1Lc2Gb.png) 驗證方法2: 不需要使用參數,作法更簡單 ![](https://i.imgur.com/nZlYJdE.png) ### 存入資料庫遇到問題點 ![](https://i.imgur.com/f4h9n1V.png) 原因: laravel在mysql驗證中預設是嚴格模式 方法一: 如果不需要嚴格的驗證方式的話,可以在config/database.php將strict改為false ![](https://i.imgur.com/UTwGtMW.png) ## Laravel + Vue.js 入門 - CRUD - 09 ### 編輯 編輯作法,編輯與新增差不多,blade模板方式可以直接複製create,只需要改依些地方 update需要攜帶personId,要知道要編輯的是哪一個id,並且要注意php都使用單引號 @method('PUT'): 為偽造方法 ![](https://i.imgur.com/5OMpVam.png) 所有清單列表編輯按鈕 ![](https://i.imgur.com/KwtkRbg.png) find()尋找文件: https://laravel.com/docs/7.x/eloquent#retrieving-single-models ![](https://i.imgur.com/KJKuuKF.png) where get 如果搜尋很多筆資料,帶回來的會是多維的 前端做資料的綁定,將資料傳到欄位上面,old('','物件->key') ![](https://i.imgur.com/coL6K3r.png) 更新controller ![](https://i.imgur.com/5ZU5Jqk.png) 新增資料庫文件: https://laravel.com/docs/7.x/eloquent#inserting-and-updating-models ### 刪除 回到前端,將真實資料帶入 ![](https://i.imgur.com/zZlBJZP.png) F12可以看到偽造及參數已經帶入 ![](https://i.imgur.com/aRQBSsg.png) 刪除controller ![](https://i.imgur.com/idubNSU.png) ## Laravel + Vue.js 入門 - CRUD - 10 新建一個專案,框架改為vue,流程跟前面差不多: 1. 複製資料庫 ![](https://i.imgur.com/daQQnPA.png) 2. 新建一個laravel專案 composer create-project --prefer-dist laravel/laravel:^7.0 project_04 ![](https://i.imgur.com/Dk0A3pn.png) 3. 安裝laravel UI 套件 指令: composer require laravel/ui:^2.4, 補充: laravel版本: 第7版支援2,第8版支援3 4. 架構出一個後端登入驗證介面 指令: php artisan ui bootstrap --auth 5. 建立一個Models,建議建立在Http底下,Http新增Models資料夾, 指令: php artisan make:model Http/Models/Person 6. 建立control,這邊比較不一樣的做法: 指令: php artisan make:controller PersonController --api 在這邊要注意一個地方,選擇api,所建立的fucntion跟使用resource少了create/edit,預設上是因為假設全部都做在同一頁面 api文件: https://laravel.com/docs/7.x/controllers --- ## Laravel + Vue.js 入門 - CRUD - 11 api路由出現方式: 這邊範例會先隱藏不做複雜的,只做一班後台驗證,會先將middleware('api')隱藏 ![](https://i.imgur.com/uuo6lS1.png) 新增一般後台驗證api,不需要煩惱token部分 closer=>閉包 ![](https://i.imgur.com/xQ1WInn.png) 取得聯絡簿人員列表: 直接引用model取得列表 ![](https://i.imgur.com/VEIAo4i.png) ![](https://i.imgur.com/YdDAJAc.png) 定義上uri和name盡量一致,在呼叫上會使用name,action運用會在route裡面 ![](https://i.imgur.com/I1Xa3yw.png) **新增/刪除/修改都寫在web.php,修正簡易寫法: 批次載入** 新增 ![](https://i.imgur.com/cncEOPW.png) 修改 ![](https://i.imgur.com/owxfRrD.png) 刪除 ![](https://i.imgur.com/JpTgXOj.png) 相關文件: https://laravel.com/docs/7.x/eloquent#mass-assignment ## Laravel + Vue.js 入門 - CRUD - 12 laravel csrf: 跨站請求偽造 防止有心人士做重複地請求去竊取重要的資料 https://laravel.com/docs/7.x/csrf https://ithelp.ithome.com.tw/articles/10208593?sc=iThelpR x-xsrf-token: csrf token擋頭,放在xsrf-token裡面cookie裡面, https://laravel.com/docs/7.x/csrf#csrf-x-xsrf-token 放置位置: ![](https://i.imgur.com/lp2mUj3.png) ![](https://i.imgur.com/ql0cHKc.png) 可以看到與cookie作連動 xsrf-token是laravel的token,建立UI的時候就會自動加入,並且每一頁面都會有,如果沒有的話可以自動加入 ![](https://i.imgur.com/RYH7P0V.png) 如果沒有加入token,可以照文件手動強制將token寫入cookie,如果是使用jquery可以使用$.ajaxSetup加入 ![](https://i.imgur.com/eufGxTo.png) https://laravel.com/docs/7.x/csrf#csrf-x-csrf-token 引用axios套件後,會自動去抓取x-csrf-token,不需要再手動強制去加入 ![](https://i.imgur.com/uFwaYtL.png) postman 傳遞x-xsrf-token https://ivanagyro.medium.com/%E7%94%A8postman-6-0-7%E5%82%B3%E9%81%9Ex-xsrf-token-6104e94d6424 ## Laravel + Vue.js 入門 - CRUD - 13 引入vue 在組件上面新增@section('script')~@endsection 區塊,用來寫vue ![](https://i.imgur.com/ZFdYQKx.png) 使用上前面必須要加上一個@,因為與php有衝突 ![](https://i.imgur.com/IrOAo48.png) 相關文件: https://laravel.com/docs/7.x/blade#blade-and-javascript-frameworks --- laravel 錯誤編號意思: 400 Bad request:通常是因為參數錯誤,沒有傳遞請求必須夾帶的參數或是參數類型不匹配 401 Unauthorized:沒有帶認證資料或者帶了錯誤的認證資料 403 Forbidden:用戶端帶了正確的參數,,但傳遞參數的用戶沒有權限訪問此站,伺服器收到請求但拒絕提供服務 419 => token沒有對應 422 => 代表有欄位沒有填寫 500 => 502 => bad gateway,錯誤網關,指上游伺服器和網關/代理不同意的協議交換數據,通常是網站本身的問題不是用戶端的問題,這段代碼是HTTP狀態代碼之一,他警告web伺服器管理員網站出了問題 1. 伺服器超載: 如果伺服器耗盡內存,伺服器可能會崩潰,原因是站點上有大量訪問者或DDOS攻擊 2. 防火牆阻止請求: 防火牆可能會阻止邊緣伺服器和上游伺服器之間的通信。某些DDoS保護系統可能會過度反應並阻止來自內容傳送系統的請求。 3. 編程錯誤:有時網站代碼中的一個錯誤可能意味著請求不能得到正確的響應,從而導致出現這個錯誤。 4. 網路錯誤: DNS問題、路由問題和ISP相關的問題也可以導致錯誤網關。 5. 伺服器軟體超時: 當Web伺服器需要更多時間來完成並且緩存工具達到其超時值時,也會發生此錯誤。慢查詢也會導致此問題。 解決方法: 要釐清 1. ajax傳輸機制原理是甚麼 2. 為什麼會有header 3. head和header是不一樣 4. request和response的擋頭是甚麼 --- ## Laravel + Vue.js 入門 - CRUD - 14 api url: https://laravel.com/docs/7.x/helpers#method-route 下方指令確認api url表格: 最主要看Name欄位 ![](https://i.imgur.com/AnYSLe9.png) api引用介接: url下({{route('api.persons')}}) ![](https://i.imgur.com/gOEH9yS.png) dom元素介接上要記得在花掛號上面寫上@ ![](https://i.imgur.com/sFp6OXP.png) ## Laravel + Vue.js 入門 - CRUD - 15 serialize使用方式DOM元素: 可將編碼串起來 https://api.jquery.com/serialize/ https://www.w3school.com.cn/jquery/ajax_serialize.asp ![](https://i.imgur.com/Udd55ND.png) 中文編碼修正: https://cythilya.github.io/2020/07/24/encode-decode/ const encodedStr = encodeURI('這是中文字串'); // encodedStr 得到 %E9%80%99%E6%98%AF%E4%B8%AD%E6%96%87%E5%AD%97%E4%B8%B2 --- 補充 : Schema => 可以想成是與資料庫做對換 migrate => 以應用程式為導向, 記錄對資料庫所做過的動作, 只紀錄結構, 但是如果一來一往刪除, 資料會消失 artisan 指令 => php .\artisan --- 其他連結: laraval 教學:https://www.youtube.com/watch?v=pSuVgTp2Ovg&list=PL2SrkGHjnWcyOquWJIEd7AYAJGMAUdp-a&index=29 IT幫幫忙: https://ithelp.ithome.com.tw/users/20120326/ironman/2463 php後端debug: https://medium.com/pvt5r486/%E5%88%9D%E6%8E%A2%E5%BE%8C%E7%AB%AF-no-2-%E4%BD%BF%E7%94%A8vs-code-%E9%96%8B%E7%99%BCphp-%E7%9A%84-debug-%E8%A8%AD%E5%AE%9A%E8%88%87-composer-%E5%A5%97%E4%BB%B6%E7%AE%A1%E7%90%86-f0b45955aa9b 課程共筆連結: https://docs.google.com/document/d/1adZSaeq7BXMRsvKmSsgRECO2ap3c9PPV4DmxAz0ZpYQ/edit?fbclid=IwAR1-VniCsJM0VlruvwflOA86Ligwb7gwIm73EH7BPyu19ieCVybWOc3mnq0