SlideShare a Scribd company logo
1 of 26
Download to read offline
CRUD綜合運⽤用
范聖佑 Shengyou Fan
新北市樹林國⼩小 (2015/07/09)
適
⽤用
5.1
版
單元主題
• 了解何謂 CRUD?以及 CRUD 對應的動作
• 安裝 Form Builder 產⽣生表單 DOM
• 了解更多 Eloquent 特殊功能
• ⽰示範實作專案 CRUD 功能
CRUD	
  簡介
什麼是 CRUD?
• CRUD = 針對⼀一個 resource 的標準四個操作
- Create 建⽴立資料
- Read 讀取資料
- Update 更新資料
- Delete 刪除資料
RESTful 動作對應
• Laravel 的 RESTful Controler 動作對應依以下表格:
動詞 路徑 動作 名稱
GET /resource index resource.index
GET /resource/create create resource.create
POST /resource store resource.store
GET /resource/{id} show resource.show
GET /resource/{id}/edit edit resource.edit
PUT/PATCH /resource/{id} update resource.update
DELETE /resource/{id} destroy resource.destroy
Route 動作設定
• 設定 Route 動作改對應⾄至相應的 Controller
• 也可以⽤用 RESTful Resource Controllers,⼀一⾏行抵數⾏行
//	
  app/Http/routes.php	
  
Route::get(/*	
  略	
  */);	
  
Route::post(/*	
  略	
  */);	
  
Route::patch(/*	
  略	
  */);	
  
Route::delete(/*	
  略	
  */);
//	
  app/Http/routes.php	
  
Route::resource('posts',	
  'PostsController');
使⽤用	
  Form	
  Builder
★ 參考⽂文件:http://laravelcollective.com/docs/5.1/html
⽤用 Form Builder 產⽣生 DOM
• 直接在View 裡寫 HTML DOM 是絕對沒有問題的
• 但若是可以⽤用 Form Builder 來產⽣生 HTML 的話,還
可以搭配 Model ⾃自動產⽣生⼀一些 DOM,省去⾃自⼰己寫
HTML 的時間
• Form Builder 在 Laravel 4 時是內建的,Laravel 5 以後
從核⼼心元件移出來,若想⽤用的話要⾃自⼰己裝:
-­‐ "laravelcollective/html":	
  "^5.1"
開啟/關閉表單
• 開啟表單
• Model 綁定
• 關閉表單
Form::open(['url'	
  =>	
  '{foo/bar}',	
  'method'	
  =>	
  'POST'])	
  
Form::open(['route'	
  =>	
  '{route.name}',	
  'method'	
  =>	
  'POST'])
Form::model($post,	
  ['route'	
  =>	
  ['{route.name}',	
  $post-­‐>id]])
Form::close()
產⽣生表單元素
• 產⽣生 Input、Label、Textarea
• 產⽣生 Submit 按鈕
Form::label('{input	
  name}',	
  '{display	
  text}')	
  
Form::text('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::email('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::textarea('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::radio('{field	
  name}',	
  '{value}',	
  {default})
Form::submit('{field	
  name}',	
  [{opt_array}])
View 上⾯面產⽣生表單
• 在View 上⾯面產⽣生需要使⽤用的表單 HTML,並指定動
作⾄至對應的 Route
//	
  resources/views/posts/create.blade.php	
  
Form::open(['route'	
  =>	
  'posts.store',	
  'method'	
  =>	
  'POST'])	
  
/*	
  略	
  */	
  
Form::close()	
  
//	
  resources/views/posts/edit.blade.php	
  
//	
  $post	
  是	
  Model	
  
Form::model($post,	
  ['route'	
  =>	
  ['posts.update',	
  $post-­‐>id],	
  
'method'	
  =>	
  'PATCH'])	
  
/*	
  略	
  */	
  
Form::close()
CRUD	
  綜合運⽤用
寫⼊入資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料寫⼊入資料庫
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  store(Request	
  $request)	
  
{	
  
	
   $post	
  =	
  AppPost::create($request-­‐>all());	
  
/*	
  略	
  */	
  
}
更新資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料更新⾄至資料庫
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  update($id,	
  Request	
  $request)	
  
{	
  
	
   $post	
  =	
  AppPost::find($id);	
  
	
   $post-­‐>update($request-­‐>all());	
  
/*	
  略	
  */	
  
}
刪除資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料從資料庫裡刪除
• 利⽤用 Model 的關聯設定,把關聯資料表內的資料也
⼀一起刪除
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  destroy($id)	
  
{	
  
	
   $post	
  =	
  AppPost::find($id);	
  
	
  	
  	
  	
  foreach($post-­‐>comments	
  as	
  $comment)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  $comment-­‐>delete();	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  $post-­‐>delete();	
  
/*	
  略	
  */	
  
}
⾴頁⾯面跳轉
• 操作資料庫的動作完成後,依照需求跳轉⾄至指定的
⾴頁⾯面
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  store(Request	
  $request)	
  
{	
  
	
   /*	
  略	
  */	
  
	
   return	
  redirect()-­‐>route('posts.show',	
  $post-­‐>id);	
  
}	
  
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  destroy($id)	
  
{	
  
	
   /*	
  略	
  */	
  
	
   return	
  redirect()-­‐>route('posts.index');	
  
}
⾃自動分⾴頁
• Laravel 的 Model 在取筆數時,可以⾃自動幫我們做分
⾴頁,在⾴頁⾯面上也可以⾃自動幫我們產⽣生 Bootstrap 的
Pagination 元件
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  index()	
  
{	
  
	
   $posts	
  =	
  AppPost::orderBy('created_at',	
  'desc')	
  
	
   	
   	
   	
   	
   	
  	
  	
  	
  -­‐>paginate(10);	
  //paginate($perPage)	
  
	
   $data	
  =	
  compact('posts');	
  
	
   return	
  view('posts.index',	
  $data);	
  
}	
  
//	
  resources/views/posts/index.blade.php	
  
<div	
  class="text-­‐center">	
  
	
   {!!	
  $posts-­‐>render()	
  !!}	
  
</div>
隨機⽂文章
• Laravel 的 Collection 可以直接幫我們從中隨機取出
⼀一⾄至數個內容,只需要呼叫 random() 即可
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  random()	
  
{	
  
	
   $post	
  =	
  AppPost::all()-­‐>random();	
  //random($number)	
  
	
   $data	
  =	
  compact('post');	
  
	
   return	
  view('posts.show',	
  $data);	
  
}
Model 的時間戳記
• 在 Eloquent 的 Model 設計裡,每⼀一個 Model 都會有
兩個時間戳記的欄位:created_at 及 updated_at
• 當 Model 新建⽴立時,created_at 和 updated_at
都會寫⼊入當下的時間。但當 Model 更新時,則只會
將當下的時間更新⾄至 updated_at,這樣就可以做到
紀錄 Model 建⽴立及最後⼀一次更新的時間戳記
• Eloquent 預設就會將這兩個時間欄位轉換成 Carbon
物件,也就是說,當我們在輸出這些欄位時,可以
直接使⽤用 Carbon 物件的 API 來做⽇日期時間的轉換
常⽤用 Carbon API
• Carbon 是 Modern PHP ⾮非常好⽤用的⽇日期時間套件,
可以⾮非常⽅方便的輸出、轉換、操作 PHP 的⽇日期與時
間,常⽤用的 API 有:
-­‐ $model-­‐>created_at-­‐>toDateString();	
  
-­‐ $model-­‐>created_at-­‐>toTimeString();	
  
-­‐ $model-­‐>created_at-­‐>toDateTimeString();	
  
-­‐ $model-­‐>created_at-­‐>format('Y-­‐m-­‐d	
  H:i:s');	
  
-­‐ $model-­‐>created_at-­‐>diffForHumans();
實作專案	
  CRUD
實作 CRUD
• 依據⼯工作坊網站企劃書,實作不同 resource 的
CRUD 如下:
- 針對⽂文章內容做 CRUD
- 針對留⾔言做 CR
• 提⽰示:
- 使⽤用 Form Builder 並綁定 Model 產⽣生 DOM
- 記得要設定 ServiceProvider、Aliases 及⽤用 {!! 輸出
Eloquent 延伸⽤用法
• 在 隨機⽂文章 ⾴頁裡使⽤用 Model::random() 取得隨機
的⼀一篇⽂文章,再把該⽂文章傳⾄至View 進⾏行顯⽰示
• 在有⽂文章列表的⾴頁⾯面裡,加上 Model::paginate()
讓 Laravel ⾃自動幫我們完成分⾴頁查詢,並在View 裡⾯面
產⽣生分⾴頁選單連結
存檔點
• 試著把現在已經可以運作的程式碼加⼊入版本控制內
• 流程提醒:
- working directory > staging area > commit
單元總結
• 在這個單元裡我們學到了些什麼?
- CRUD 基本觀念及慣例
- 使⽤用 Form Builder 整合 Model 產⽣生 DOM
- Eloquent 的額外⽤用法
- 實作專案所需的 CRUD 功能
Q & A
歡迎提問討論

More Related Content

What's hot

Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用Shengyou Fan
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合Shengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作Shengyou Fan
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
Laravel - 系統全攻略
Laravel - 系統全攻略Laravel - 系統全攻略
Laravel - 系統全攻略Vincent Chi
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 SeedingShengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制Shengyou Fan
 

What's hot (20)

Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
Laravel - 系統全攻略
Laravel - 系統全攻略Laravel - 系統全攻略
Laravel - 系統全攻略
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
Eloquent ORM
Eloquent ORMEloquent ORM
Eloquent ORM
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
CRUD 綜合應用
CRUD 綜合應用CRUD 綜合應用
CRUD 綜合應用
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
使用者認證
使用者認證使用者認證
使用者認證
 

Similar to CRUD 綜合運用

Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejsChi-wen Sun
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作Shengyou Fan
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!Will Huang
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101Jollen Chen
 
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfLaravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfNCUDSC
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流pigso
 
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務Mu-Fan Teng
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1modou li
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發Weizhong Yang
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013modou li
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Railsshaokun
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 

Similar to CRUD 綜合運用 (20)

Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
進擊的前端工程師:今天就用 JSON Server 自己打造 API 吧!
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Backbone.js and MVW 101
Backbone.js and MVW 101Backbone.js and MVW 101
Backbone.js and MVW 101
 
Laravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdfLaravel II - Developer Student Clubs NCU.pdf
Laravel II - Developer Student Clubs NCU.pdf
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流
 
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務
Mopcon2014 - 使用 Sinatra 結合 Ruby on Rails 輕鬆打造完整 Full Stack 網站加 API Service服務
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 

More from Shengyou Fan

[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...Shengyou Fan
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀Shengyou Fan
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能Shengyou Fan
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023Shengyou Fan
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀Shengyou Fan
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇Shengyou Fan
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseShengyou Fan
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具Shengyou Fan
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園Shengyou Fan
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin MultiplatformShengyou Fan
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率Shengyou Fan
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用Shengyou Fan
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜Shengyou Fan
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS AggregatorShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON APIShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin ServerlessShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置Shengyou Fan
 

More from Shengyou Fan (20)

[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your Database
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
 

CRUD 綜合運用

  • 2. 單元主題 • 了解何謂 CRUD?以及 CRUD 對應的動作 • 安裝 Form Builder 產⽣生表單 DOM • 了解更多 Eloquent 特殊功能 • ⽰示範實作專案 CRUD 功能
  • 4. 什麼是 CRUD? • CRUD = 針對⼀一個 resource 的標準四個操作 - Create 建⽴立資料 - Read 讀取資料 - Update 更新資料 - Delete 刪除資料
  • 5. RESTful 動作對應 • Laravel 的 RESTful Controler 動作對應依以下表格: 動詞 路徑 動作 名稱 GET /resource index resource.index GET /resource/create create resource.create POST /resource store resource.store GET /resource/{id} show resource.show GET /resource/{id}/edit edit resource.edit PUT/PATCH /resource/{id} update resource.update DELETE /resource/{id} destroy resource.destroy
  • 6. Route 動作設定 • 設定 Route 動作改對應⾄至相應的 Controller • 也可以⽤用 RESTful Resource Controllers,⼀一⾏行抵數⾏行 //  app/Http/routes.php   Route::get(/*  略  */);   Route::post(/*  略  */);   Route::patch(/*  略  */);   Route::delete(/*  略  */); //  app/Http/routes.php   Route::resource('posts',  'PostsController');
  • 7. 使⽤用  Form  Builder ★ 參考⽂文件:http://laravelcollective.com/docs/5.1/html
  • 8. ⽤用 Form Builder 產⽣生 DOM • 直接在View 裡寫 HTML DOM 是絕對沒有問題的 • 但若是可以⽤用 Form Builder 來產⽣生 HTML 的話,還 可以搭配 Model ⾃自動產⽣生⼀一些 DOM,省去⾃自⼰己寫 HTML 的時間 • Form Builder 在 Laravel 4 時是內建的,Laravel 5 以後 從核⼼心元件移出來,若想⽤用的話要⾃自⼰己裝: -­‐ "laravelcollective/html":  "^5.1"
  • 9. 開啟/關閉表單 • 開啟表單 • Model 綁定 • 關閉表單 Form::open(['url'  =>  '{foo/bar}',  'method'  =>  'POST'])   Form::open(['route'  =>  '{route.name}',  'method'  =>  'POST']) Form::model($post,  ['route'  =>  ['{route.name}',  $post-­‐>id]]) Form::close()
  • 10. 產⽣生表單元素 • 產⽣生 Input、Label、Textarea • 產⽣生 Submit 按鈕 Form::label('{input  name}',  '{display  text}')   Form::text('{field  name}',  '{value}',  [{opts  array}])   Form::email('{field  name}',  '{value}',  [{opts  array}])   Form::textarea('{field  name}',  '{value}',  [{opts  array}])   Form::radio('{field  name}',  '{value}',  {default}) Form::submit('{field  name}',  [{opt_array}])
  • 11. View 上⾯面產⽣生表單 • 在View 上⾯面產⽣生需要使⽤用的表單 HTML,並指定動 作⾄至對應的 Route //  resources/views/posts/create.blade.php   Form::open(['route'  =>  'posts.store',  'method'  =>  'POST'])   /*  略  */   Form::close()   //  resources/views/posts/edit.blade.php   //  $post  是  Model   Form::model($post,  ['route'  =>  ['posts.update',  $post-­‐>id],   'method'  =>  'PATCH'])   /*  略  */   Form::close()
  • 13. 寫⼊入資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料寫⼊入資料庫 //  app/Http/Controllers/PostsController.php   public  function  store(Request  $request)   {     $post  =  AppPost::create($request-­‐>all());   /*  略  */   }
  • 14. 更新資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料更新⾄至資料庫 //  app/Http/Controllers/PostsController.php   public  function  update($id,  Request  $request)   {     $post  =  AppPost::find($id);     $post-­‐>update($request-­‐>all());   /*  略  */   }
  • 15. 刪除資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料從資料庫裡刪除 • 利⽤用 Model 的關聯設定,把關聯資料表內的資料也 ⼀一起刪除 //  app/Http/Controllers/PostsController.php   public  function  destroy($id)   {     $post  =  AppPost::find($id);          foreach($post-­‐>comments  as  $comment)  {                  $comment-­‐>delete();          }          $post-­‐>delete();   /*  略  */   }
  • 16. ⾴頁⾯面跳轉 • 操作資料庫的動作完成後,依照需求跳轉⾄至指定的 ⾴頁⾯面 //  app/Http/Controllers/PostsController.php   public  function  store(Request  $request)   {     /*  略  */     return  redirect()-­‐>route('posts.show',  $post-­‐>id);   }   //  app/Http/Controllers/PostsController.php   public  function  destroy($id)   {     /*  略  */     return  redirect()-­‐>route('posts.index');   }
  • 17. ⾃自動分⾴頁 • Laravel 的 Model 在取筆數時,可以⾃自動幫我們做分 ⾴頁,在⾴頁⾯面上也可以⾃自動幫我們產⽣生 Bootstrap 的 Pagination 元件 //  app/Http/Controllers/PostsController.php   public  function  index()   {     $posts  =  AppPost::orderBy('created_at',  'desc')                    -­‐>paginate(10);  //paginate($perPage)     $data  =  compact('posts');     return  view('posts.index',  $data);   }   //  resources/views/posts/index.blade.php   <div  class="text-­‐center">     {!!  $posts-­‐>render()  !!}   </div>
  • 18. 隨機⽂文章 • Laravel 的 Collection 可以直接幫我們從中隨機取出 ⼀一⾄至數個內容,只需要呼叫 random() 即可 //  app/Http/Controllers/PostsController.php   public  function  random()   {     $post  =  AppPost::all()-­‐>random();  //random($number)     $data  =  compact('post');     return  view('posts.show',  $data);   }
  • 19. Model 的時間戳記 • 在 Eloquent 的 Model 設計裡,每⼀一個 Model 都會有 兩個時間戳記的欄位:created_at 及 updated_at • 當 Model 新建⽴立時,created_at 和 updated_at 都會寫⼊入當下的時間。但當 Model 更新時,則只會 將當下的時間更新⾄至 updated_at,這樣就可以做到 紀錄 Model 建⽴立及最後⼀一次更新的時間戳記 • Eloquent 預設就會將這兩個時間欄位轉換成 Carbon 物件,也就是說,當我們在輸出這些欄位時,可以 直接使⽤用 Carbon 物件的 API 來做⽇日期時間的轉換
  • 20. 常⽤用 Carbon API • Carbon 是 Modern PHP ⾮非常好⽤用的⽇日期時間套件, 可以⾮非常⽅方便的輸出、轉換、操作 PHP 的⽇日期與時 間,常⽤用的 API 有: -­‐ $model-­‐>created_at-­‐>toDateString();   -­‐ $model-­‐>created_at-­‐>toTimeString();   -­‐ $model-­‐>created_at-­‐>toDateTimeString();   -­‐ $model-­‐>created_at-­‐>format('Y-­‐m-­‐d  H:i:s');   -­‐ $model-­‐>created_at-­‐>diffForHumans();
  • 22. 實作 CRUD • 依據⼯工作坊網站企劃書,實作不同 resource 的 CRUD 如下: - 針對⽂文章內容做 CRUD - 針對留⾔言做 CR • 提⽰示: - 使⽤用 Form Builder 並綁定 Model 產⽣生 DOM - 記得要設定 ServiceProvider、Aliases 及⽤用 {!! 輸出
  • 23. Eloquent 延伸⽤用法 • 在 隨機⽂文章 ⾴頁裡使⽤用 Model::random() 取得隨機 的⼀一篇⽂文章,再把該⽂文章傳⾄至View 進⾏行顯⽰示 • 在有⽂文章列表的⾴頁⾯面裡,加上 Model::paginate() 讓 Laravel ⾃自動幫我們完成分⾴頁查詢,並在View 裡⾯面 產⽣生分⾴頁選單連結
  • 25. 單元總結 • 在這個單元裡我們學到了些什麼? - CRUD 基本觀念及慣例 - 使⽤用 Form Builder 整合 Model 產⽣生 DOM - Eloquent 的額外⽤用法 - 實作專案所需的 CRUD 功能