Toggle main menu visibility
下載輕鬆架
套件下載
使用手冊
發問討論
網站地圖
:::
登入
登入
帳號
密碼
登入
:::
所有書籍
「Laravel 5.8 入門講義 」目錄
MarkDown
17-2 設定訂單及訂單項目的關聯
1. 關於 Laravel
1-1 為何需要框架?
1-2 快速安裝開發環境及開發工具
1-2-1 以Laragon建立運作環境
1-2-2 修改資料庫密碼並建立myshop資料庫
1-2-3 Visual Studio Code文字編輯器
1-2-4 安裝 Composer
1-2-5 [參考]註冊 GitHub
1-2-6 [參考]瀏覽器附加元件
1-2-7 [參考]申請mailtrap帳號
1-2-8 [參考]用Homestead建構開發環境
2. 專案需求分析
2-1 建立專案
2-2 [參考]將專案加入本地端的 git
2-3 [參考]將專案放上GitHub
2-4 設定專案環境
2-5 Laravel運作週期
3. 建立使用者認證
3-1 新增中文語系
4. 了解路由 Router 及視圖 View
4-1 製作系統主樣板
4-2 為樣板製作中文語系檔
4-3 修改首頁畫面
4-4 Blade 樣板語法(自訂導覽列選項)
5. 安裝 laravel-admin 後台
5-1 修改後台設定檔
5-2 將後台選單中文化的方法
6. 修改使用者資料表
6-1 修改註冊頁面
6-2 讓新增的欄位可以寫入資料庫
6-3 剛剛我們做了什麼?
7. 開始定義系統各項功能
7-1 還沒有控制器的路由寫法
7-2 有控制器的路由寫法
8. 在後台新增買家管理
8-1 建立管理買家的後台控制器
8-2 新增管理買家的路由
8-3 新增選單
8-4 調整可修改的項目
9. 建立商品模型
9-1 編輯並執行商品(Product)的 migrate 檔案
9-2 建立後台商品管理頁面
9-3 中文化商品管理界面
9-4 後台新增商品頁面
9-5 後台的驗證表單資料
9-6 後台加入所見即所得編輯器
9-7 後台修改商品
10. 建立前台顯示商品頁面
10-1 建立前台商品控制器
10-2 修改路由讓首頁呈現商品列表
10-3 修改控制器以執行取得資料動作
10-4 修改模型以正確顯示圖片
10-5 修改視圖以顯示商品列表
11. 建立商品測試資料
11-1 讓系統也可以顯示測試圖片
11-2 建立Seeder快速填充資料
12. 建立商品詳情頁的路由
12-1 建立商品詳情頁的控制器
12-2 路由模型綁定
12-3 建立商品詳情頁的視圖
13. 一般的異常處理
13-1 優雅的異常處理
14. 關於購物車
14-1 建立購物車的模型
14-2 設定商品、購物車與買家的關聯
14-3 建立新增至購物車的路由
14-4 建立購物車控制器
15. 使用 Laravel Mix 來管理前端資源
15-1 修改前台視圖
15-2 安裝 SweetAlert
15-3 實現加入購物車按鈕
15-4 將購物項目寫入資料庫
15-5 用 fillable 批量賦值寫入
15-6 建立Request來做資料整理及檢查
15-7 利用模型觀察器建立使用者資料
15-8 根據不同情況來進行新增品項或累加品項
16. 查看購物車商品
16-1 微調購物車的傳送方式
16-2 刪除某個購物品項
16-3 調整商品數量
17. 關於訂單
17-1 建立訂單及品項的模型及控制器
17-2 設定訂單及訂單項目的關聯
17-3 加入送出訂單按鈕
17-4 我的訂單列表
17-5 後台訂單管理
17-6 中文化訂單管理界面
18. 重建由GitHub下載的Laravel專案
18-1 佈署到主機上
17-4 我的訂單列表
Laravel 5.8 入門講義 ================= 1. 為了讓訂單能送出,我們必須在購物車界面加上<form>,至於送出的方式,可以直接利用表單方式送出,也可以利用ajax方式送出。由於後者我們已經用過好幾次,因此,這次來學學前者該如何使用。 2. 修改路由`\專案\routes\web.php`,加入儲存訂單的功能: ```php Route::post('/order/store', 'OrderController@store')->name('order.store'); ``` 3. 接著修改購物車模板`\專案\resources\views\cart\index.blade.php`: ```markup
我的購物車
@csrf
...略... @forelse($user->carts as $cart) ...略... @empty ...略... @endforelse ...略...
@if(count($user->carts))
收貨地址
送出訂單
@endif
``` - 首先,我們在前後加入`
`使之成為一個可以送出的表單,表單的方法必須設定為`post`,因為屆時要儲存的`store`其動詞就是`post`(第 2 行) - 表單務必加入`@csrf`,以產生csrf令牌,否則送出後,會出現419 Page Expired的訊息(第 3 行),詳情可參考:
- 接著在第 13~23 行加入預設地址及送出鈕,地址預設值由會員的地址產生,前後會先用`count()`判斷購物車陣列數量,也就是判斷是否有東西,有才會顯示,避免送出空訂單。 4. 送出訂單有幾個基本動作要執行: 1. 在orders中新增一筆訂單資料 2. 將購物車中的所有品項寫入order\_items 3. 刪除購物車中該買家的所有品項 5. 最後修改最重要(也最複雜)的訂單的控制器`\專案\app\Http\Controllers\OrderController.php`: ```php use App\Order; use App\OrderItem; use App\Product; use DB; use Illuminate\Http\Request; ...略... public function store(Request $request) { $user = $request->user(); // 開啟一個資料庫交易 DB::transaction(function () use ($user, $request) { // 建立一個訂單 $order = new Order; $order->address = $request->address; $order->total = 0; $order->closed = 0; $order->user_id = $user->id; $order->save(); $total = 0; // 計算所有購物車內容的數量及價格 foreach ($request->amount as $product_id => $amount) { $product = Product::find($product_id); $item = new OrderItem; $item->order_id = $order->id; $item->product_id = $product_id; $item->amount = $amount; $item->price = $product->price; $item->save(); $total += $product->price * $amount; } // 更新訂單總金額 $order->total = $total; $order->update(); // 將下單的商品從購物車中移除 $user->carts()->delete(); }); return redirect()->route('index'); } ``` 6. 第12行:先從請求,取得目前使用者(即買家)的模型資料,後面要進行關聯時會用到。 7. 第14行:利用`DB::transaction();`建立一個資料庫的交易,需完成裡面所有動作,交易才會成立,否則會全部作廢。 1. 交易詳情可參考:
2. 交易中用了一個閉包`function () use ($user, $request) {}`,這是閉包+引用的作法,用來傳參數給閉包的內容使用,詳情可參考:
8. 第16-21行:我們先將訂單存起來,`total`(總計)暫時先設成0,等所有購物車項目計算完再來更新這裡的值(切勿相信或使用從模板傳來的金額,因為非常容易被修改) 9. 第25行:利用迴圈,將所有購物車的內容計算過一遍。`$request->amount`是一個陣列,其索引就是產品編號`$product_id`,其值就是購買數量`$amount`。 10. 第26行:利用`product_id`取得該商品資訊,我們主要是為了要取的該商品價錢 11. 第27-32行:我們建立一筆訂單項目,紀錄該購物車的商品編號及數量,以及所屬的訂單編號`$order->id`。 12. 第33行:則是計算商品價格及數量,並累計到總價 13. 第38行:利用`update()`更新該訂單的總價,關於更新可以參考:
14. 第41行:我們從`$user->carts()`即該使用者的所有購物車中的項目,利用`delete()`將之全數刪除即可。 15. 第44行:最後只要利用`redirect()`做轉向,暫時回到首頁即可,關於`redirect`用法可參考:
[![到GitHub觀看此單元程式異動](https://campus-xoops.tn.edu.tw/uploads/tad_book3/image/34/to_github.png)](https://github.com/tad0616/myshop/commit/0f36627ff6a02c0abbf916291bf122b2e9e6ada8)
:::
書籍目錄
展開
|
闔起
快速登入
所有討論區
Tad Search 資料查詢
懶人框架討論區
實戰PHP7+MySQL
XOOPS輕鬆架快速上手
校園網站輕鬆架一般討論區
Booking Helper 預約助手
es_stud_sign 班級報名
es charge 學生收費管理
E-Stud import 學生名冊管理
es_after_school 課後照顧報名
es_exam 學生作業繳交
ES_panel 校務行政面板
es_timetable 課表
ES_youtube 本校影音
info_whats 網路設備記錄
jill booking 場地預約
jill_notice 臨時公告
jill query 簡易查詢
jill receipt 領據填報
kw club 社團報名
kw device 設備借用管理系統
ntpc_oprnid 新北市 OpenID 登入
TinyD嵌入內容模組
ugm contact us 聯絡我們
ugm page 自訂頁面
ugm table 萬用表格
Yaoh Servicelearning 服務學習管理系統
dummy 自訂模組
soone_submit 投稿模組
Tad Adm 站長工具箱
Tad Assignment 作業上傳展示模組
Tad Blocks 進階區塊管理
Tad Book3 線上書籍
Tad Cal 行事曆
Tad Cbox 即時留言簿
Tad Discuss 討論區模組
Tad Embed 崁入模組
Tad Evaluation 評鑑檔案管理
Tad Form 萬用表單模組
Tad FAQ 常見問答
Tad Google 相簿
Tad Gallery 電子相簿
Tad Guide 安裝精靈
Tad Honor 榮譽榜
Tad idioms 背背成語
Tad Link 好站連結
Tad Login 快速登入
Tad Lunch3 午餐資訊
Tad Lunch2 營養午餐公告
Tad Meeting 會議系統
Tad Merage 線上合併套印
Tad News 本站消息
Tad Player 影音播放
Tad RSS 友站新聞
Tad Repair 維修通報
Tad SiteMap網站地圖
Tad Timeline 重要紀事
Tad Themes 佈景管理
Tad Tools 工具包
Tad TV 直播電視
Tad Uploader 檔案上傳模組
Tad Users 大量會員管理
Tad Web 多人網頁模組
MyTabs 我的頁籤
Random Quote 隨機小語
LogCounterX 網站流量統計
Yaoh light 多區塊多層次跑馬燈模組
校園網站輕鬆架功能建議區
佈景討論區
即時留言簿
search
進階搜尋
計數器
今天:
昨天:
總計: