Soumettre la recherche
Mettre en ligne
Eloquent ORM
•
4 j'aime
•
34,960 vues
Shengyou Fan
Suivre
在 2015 年 7 月至新北市樹林國小舉辦 Laravel 工作坊,讓參與的學員在 30 個小時內學會使用 Laravel 建置一個具 Open ID 認證功能的網路應用程式。
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 36
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
使用 Controller
使用 Controller
Shengyou Fan
Route 路由控制
Route 路由控制
Shengyou Fan
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
Shengyou Fan
Composer 套件管理
Composer 套件管理
Shengyou Fan
使用者認證
使用者認證
Shengyou Fan
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
Shengyou Fan
使用 laravel 的前與後
使用 laravel 的前與後
Shengyou Fan
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
Justin Lin
Recommandé
使用 Controller
使用 Controller
Shengyou Fan
Route 路由控制
Route 路由控制
Shengyou Fan
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
Shengyou Fan
Composer 套件管理
Composer 套件管理
Shengyou Fan
使用者認證
使用者認證
Shengyou Fan
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
Shengyou Fan
使用 laravel 的前與後
使用 laravel 的前與後
Shengyou Fan
Spring 2.0 技術手冊第一章 - 認識 Spring
Spring 2.0 技術手冊第一章 - 認識 Spring
Justin Lin
管理資訊系統之資訊架構
管理資訊系統之資訊架構
5045033
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Composer 經典食譜
Composer 經典食譜
Shengyou Fan
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Introducing Modern Perl
Introducing Modern Perl
Dave Cross
SSRF基礎
SSRF基礎
Yu Iwama
Hibernate jpa
Hibernate jpa
Lhouceine OUHAMZA
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin
spring-api-rest.pdf
spring-api-rest.pdf
Jaouad Assabbour
Java Collections
Java Collections
parag
Java - Collections framework
Java - Collections framework
Riccardo Cardin
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
Java Collection framework
Java Collection framework
ankitgarg_er
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
Ippon
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
Daniel Brandão
CRUD 綜合運用
CRUD 綜合運用
Shengyou Fan
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
Contenu connexe
Tendances
管理資訊系統之資訊架構
管理資訊系統之資訊架構
5045033
Ch03 請求與回應
Ch03 請求與回應
Justin Lin
Ch07 使用 JSTL
Ch07 使用 JSTL
Justin Lin
Ch06 使用 JSP
Ch06 使用 JSP
Justin Lin
Composer 經典食譜
Composer 經典食譜
Shengyou Fan
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Justin Lin
Ch12 Spring 起步走
Ch12 Spring 起步走
Justin Lin
Introducing Modern Perl
Introducing Modern Perl
Dave Cross
SSRF基礎
SSRF基礎
Yu Iwama
Hibernate jpa
Hibernate jpa
Lhouceine OUHAMZA
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
Justin Lin
spring-api-rest.pdf
spring-api-rest.pdf
Jaouad Assabbour
Java Collections
Java Collections
parag
Java - Collections framework
Java - Collections framework
Riccardo Cardin
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Felipe J. R. Vieira
Java Collection framework
Java Collection framework
ankitgarg_er
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
Ippon
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
Daniel Brandão
Tendances
(20)
管理資訊系統之資訊架構
管理資訊系統之資訊架構
Ch03 請求與回應
Ch03 請求與回應
Ch07 使用 JSTL
Ch07 使用 JSTL
Ch06 使用 JSP
Ch06 使用 JSP
Composer 經典食譜
Composer 經典食譜
CH1. 簡介 Web 應用程式
CH1. 簡介 Web 應用程式
Ch12 Spring 起步走
Ch12 Spring 起步走
Introducing Modern Perl
Introducing Modern Perl
SSRF基礎
SSRF基礎
Hibernate jpa
Hibernate jpa
Spring 2.0 技術手冊第四章 - Spring AOP
Spring 2.0 技術手冊第四章 - Spring AOP
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch05 Servlet 進階 API、過濾器與傾聽器
Ch02 撰寫與設定Servlet
Ch02 撰寫與設定Servlet
spring-api-rest.pdf
spring-api-rest.pdf
Java Collections
Java Collections
Java - Collections framework
Java - Collections framework
POO - Aula 09 - Herança
POO - Aula 09 - Herança
Java Collection framework
Java Collection framework
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
En vedette
CRUD 綜合運用
CRUD 綜合運用
Shengyou Fan
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
Migrations 與 Schema 操作
Migrations 與 Schema 操作
Shengyou Fan
驗證與訊息
驗證與訊息
Shengyou Fan
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
Shengyou Fan
整合 Open ID
整合 Open ID
Shengyou Fan
Package 安裝與使用
Package 安裝與使用
Shengyou Fan
開發環境建置
開發環境建置
Shengyou Fan
工作坊總結
工作坊總結
Shengyou Fan
工作坊簡介
工作坊簡介
Shengyou Fan
使用者認證
使用者認證
Shengyou Fan
開發流程與工具介紹
開發流程與工具介紹
Shengyou Fan
驗證與訊息
驗證與訊息
Shengyou Fan
CRUD 綜合應用
CRUD 綜合應用
Shengyou Fan
Model & Seeding整合
Model & Seeding整合
Shengyou Fan
專案啟動與設定
專案啟動與設定
Shengyou Fan
Schema & Migration操作
Schema & Migration操作
Shengyou Fan
工作坊總結
工作坊總結
Shengyou Fan
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
Shengyou Fan
課程簡介
課程簡介
Shengyou Fan
En vedette
(20)
CRUD 綜合運用
CRUD 綜合運用
Model 設定與 Seeding
Model 設定與 Seeding
Migrations 與 Schema 操作
Migrations 與 Schema 操作
驗證與訊息
驗證與訊息
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
整合 Open ID
整合 Open ID
Package 安裝與使用
Package 安裝與使用
開發環境建置
開發環境建置
工作坊總結
工作坊總結
工作坊簡介
工作坊簡介
使用者認證
使用者認證
開發流程與工具介紹
開發流程與工具介紹
驗證與訊息
驗證與訊息
CRUD 綜合應用
CRUD 綜合應用
Model & Seeding整合
Model & Seeding整合
專案啟動與設定
專案啟動與設定
Schema & Migration操作
Schema & Migration操作
工作坊總結
工作坊總結
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
課程簡介
課程簡介
Similaire à Eloquent ORM
Eloquent ORM
Eloquent ORM
Shengyou Fan
使用 Eloquent ORM
使用 Eloquent ORM
Shengyou Fan
Model 設定與 Seeding
Model 設定與 Seeding
Shengyou Fan
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
Shengyou Fan
Migrations 與 Schema操作
Migrations 與 Schema操作
Shengyou Fan
CRUD 綜合運用
CRUD 綜合運用
Shengyou Fan
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
Liu Allen
Django development
Django development
loveyudu
Uc home二次开发参考手册
Uc home二次开发参考手册
charleenchen1990
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
Lucien Li
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
Lucien Li
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學
ilovejoomla
Backbone js and requirejs
Backbone js and requirejs
Chi-wen Sun
PHP & MySQL 教學
PHP & MySQL 教學
Bo-Yi Wu
ios分享
ios分享
Lucien Li
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212
Asika Simon
Web scraping入門1
Web scraping入門1
兆欽 丘
專案啟動與環境設定
專案啟動與環境設定
Shengyou Fan
Uliweb比较与实践 2013
Uliweb比较与实践 2013
modou li
Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则
YUCHENG HU
Similaire à Eloquent ORM
(20)
Eloquent ORM
Eloquent ORM
使用 Eloquent ORM
使用 Eloquent ORM
Model 設定與 Seeding
Model 設定與 Seeding
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
Migrations 與 Schema操作
Migrations 與 Schema操作
CRUD 綜合運用
CRUD 綜合運用
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
Django development
Django development
Uc home二次开发参考手册
Uc home二次开发参考手册
iPhone,ios,Object-c基础入门
iPhone,ios,Object-c基础入门
iPhone,ios,Object-C基础入门
iPhone,ios,Object-C基础入门
【 I Love Joomla 】- Joomla!佈景製作教學
【 I Love Joomla 】- Joomla!佈景製作教學
Backbone js and requirejs
Backbone js and requirejs
PHP & MySQL 教學
PHP & MySQL 教學
ios分享
ios分享
I Love Joomla! 佈景製作教學 0212
I Love Joomla! 佈景製作教學 0212
Web scraping入門1
Web scraping入門1
專案啟動與環境設定
專案啟動與環境設定
Uliweb比较与实践 2013
Uliweb比较与实践 2013
Moodle 项目帮助手册:程序编写准则
Moodle 项目帮助手册:程序编写准则
Plus de Shengyou Fan
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
Shengyou Fan
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
Shengyou Fan
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
Shengyou Fan
[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 2023
Shengyou Fan
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
Shengyou Fan
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
Shengyou Fan
[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 Database
Shengyou Fan
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
Shengyou Fan
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
Shengyou Fan
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
Shengyou Fan
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
Shengyou Fan
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
Shengyou Fan
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
Shengyou Fan
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
Shengyou Fan
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
Shengyou Fan
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
Shengyou Fan
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
Shengyou Fan
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
Shengyou Fan
Plus de Shengyou Fan
(20)
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[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 2023
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[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 Database
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
Eloquent ORM
1.
Eloquent ORM 范聖佑 Shengyou
Fan 新北市樹林國⼩小 (2015/07/09) 適 ⽤用 5.1 版
2.
單元主題 • 什麼是 ORM? •
Laravel 的 ORM 慣例以及如何透過 ORM 對資料做新 增、查詢、更新、刪除等動作 • ORM 間如何設定欄位的關聯? • 什麼是 tinker 互動指令⼯工具?tinker 可以幫助我 們什麼? • 設定⼯工作坊專案所需的 ORM 關聯
3.
artisan tinker 簡介
4.
tinker 互動指令列 • PHP
本⾝身就有內建互動指令 (REPL) 模式,可以在這個 模式底下測試 PHP 程式碼,並⽴立即獲得回饋 - $ php -‐a • 從 Laravel 4.1 開始整合了 Boris,提供 tinker 互動指 令列功能,除了進⼊入 PHP 的 REPL 模式外,並加載 Laravel 所有物件環境,讓開發者可以在指令模式底下 測試 Laravel 程式碼 (Boris 相依於 pcntl 外掛,Windows 平台沒有實 作,因此 tinker 在 Windows 底下功能受限) • Laravel 5.0 則是將 Boris 更換為 psysh,除了讓 tinker 功能更多外,也讓 Windows 開發者有完全的功能
5.
$ [php] artisan
tinker 進⼊入 tinker 互動指令列
6.
artisan tinker • 進⼊入
PHP 互動 (REPL) 模式,並載⼊入 Laravel 環境 - 可以直接在指令模式下測試 PHP 程式碼,或是實驗 如何操作 Laravel 物件 - 可⽤用 exit 或⽤用 Ctrl-‐C 結束 tinker 模式 • 範例: $ php artisan tinker Psy Shell v0.4.4 (PHP 5.6.10 — cli) by Justin Hileman >>> echo 'Hello, tinker!' Hello, tinker! => null >>> exit Exit: Goodbye.
7.
tinker 畫⾯面 在 artisan
tinker 底下測試 Laravel 程式
8.
dd() 測試⼯工具 • Laravel
內建的除錯函式 • 在 Laravel 4.2 版以前,dd() 其實就是把變數丟進 var_dump() 後 exit() • 在 Laravel 5.0 後,dd() 升級成呼叫 Symfony 的 VarDumper 元件,畫⾯面更好⽤用了! • 可以在任何地⽅方使⽤用,測試程式碼流程、邏輯、了 解物件內容 • 範例: $post = 'Hello, world!'; dd($post);
9.
使⽤用 Eloquent ORM ★
參考⽂文件:http://laravel.com/docs/5.1/eloquent
10.
什麼是 ORM? • Object-Relational
Mapping • 在寫資料庫查詢時,往往需要組合 SQL 查詢式,除 了要⾃自⾏行處理字串跳脫等安全性防護機制外,也要 ⾃自⾏行轉換從資料庫取出的資料格式。當查詢式變⻑⾧長、 關聯⽇日趨複雜時,在撰寫對應的功能時會更為⾟辛苦 • ⽽而 ORM 則是依照慣例,把資料庫裡⼀一筆⼀一筆的資料 變成類似物件的概念來操作。這些物件透過繼承增 加了更多的⽅方法,讓資料庫的操作 (CRUD) 更加直 覺、⽅方便
11.
Laravel 的 ORM
慣例 • Laravel 的 Model/ORM 依照以下慣例: - ⼀一種資源 (resource) 對應到資料庫裡的⼀一個資料表 (table) - ⼀一個 Model 對應到資料表裡的⼀一列 (row) - 每⼀一個 Model 裡預設都要有⼀一個 auto-increment 的 id 做為 primary key,並預設有 created_at 及 updated_at 紀錄 Model 產⽣生及更新的時間戳記 - 資料表的名稱⽤用英⽂文複數、蛇底式命名;⽽而 Model 的名稱就⽤用英⽂文單數、⼤大駝峰式命名
12.
查詢資料 • 取出全部資料 - Model::all() •
⽤用 primary key 取出單或數筆資料 - Model::find($id)、Model::find([/* ids */]) • 增加查詢條件式 - Model::where('欄位', '條件', '值') - Model::orderBy('欄位', '排序⽅方式') • 串聯多個條件 - Model::where(/*略*/)-‐>orderBy(/*略*/)-‐>get()
13.
Collection 類別 • Laravel
實作了 Collection 類別,擴充了原有陣列 (array) 的功能,讓從資料表取出來的資料更好操作 • ⽤用 Eloquent 查詢取得的回傳物件就是 Collection,由 於其實作了數個 PHP 預先定義的介⾯面,包括: ArrayAccess、Arrayable、Countable、 IteratorAggregate、Jsonable、 JsonSerializable,所以可以直接當陣列使⽤用,或 是直接輸出成 JSON 格式
14.
Collection 的運⽤用⽅方式 • 透過
Model 查詢資料庫後,Laravel 會回傳⼀一個 Collection 物件,裡⾯面放了回傳資料的 Model ,其⾏行 為就像陣列⼀一樣,可以⽀支援⽤用 foreach 取出資料 • 若是⽤用於 API,也可直接轉成 JSON 輸出 $posts = AppPost::all(); // $posts 是 Collection foreach($posts as $post) { echo $post-‐>title; // $post 是 Model } $posts = AppPost::all(); return $posts-‐>toJson();
15.
Helper 與 Facade •
平常也可以將陣列轉成 Collection 使⽤用,可以⽤用 collect() helper function 或 Collection Facade // 使⽤用 helper function $collection = collect([1, 2, 3]); // 使⽤用 Facade $collection = Collection::make([1, 2, 3]);
16.
是 Model 還是
Collection? • 若是查詢回傳的是⼀一個資料集 (Recordset) 就是 Collection;若查詢回傳的是⼀一筆資料 (Row) 就是 Model // Collection $posts = AppPost::all(); $hotPosts = AppPost::where('is_feature', 1)-‐>get(); // Model $post = AppPost::find($id); $post = AppPost::orderBy(/*略*/)-‐>first();
17.
新增資料 • 使⽤用 new
建構式 - 直接使⽤用 new 建構式產⽣生 Model 實體,再存檔 • 範例: $post = new AppPost; $post-‐>title = 'My Post Title'; $post-‐>save();
18.
新增資料 • 使⽤用 Facade
的 create ⽅方法 - 直接從陣列新增⼀一筆資料,陣列的 key 值⾃自動對應 到資料表的欄位 • 語法: - Model::create($array) • 範例: $post = AppPost::create([ 'title' => 'My Title', 'sub_title' => 'My Sub Title', 'content' => 'Post Content', 'is_feature' => true, ]);
19.
Mass Assignment • Laravel
的 ORM 可以直接⽤用 Mass Assignment 的⽅方式 直接新增資料,透過陣列 key 值與資料表欄位名稱 的對應可以迅速的將資料寫⼊入資料庫內 • 這樣的作法雖然語法簡潔、快速⽅方便,但若使⽤用不 當可能會有安全性問題,⽐比⽅方說密碼欄位有可能因 此被覆寫 • 為了提升安全性,在 Model 裡預設將所有的欄位都 設定為不可使⽤用 Mass Assignment 做為防禦⼿手段。若 要使⽤用的話,則要設定 fillable 屬性將要使⽤用 Mass Assignment 的欄位打開
20.
Mass Assignment 警⽰示
21.
設定 fillable、guarded • 在
Model 內設定 fillable 屬性,指定哪些欄位可 以透過 Mass Assignment 來寫⼊入/更新資料 • guarded 則是相反的屬性,設定後可以保護特定欄 位不使⽤用 Mass Assignment • 範例: class Post extends Model { protected $fillable = [ 'title', 'sub_title', 'content', 'is_feature' ]; protected $guarded = ['id', 'password']; }
22.
刪除資料 • 使⽤用 Model
的 delete ⽅方法 - 先取出 Model 實體後,再刪除 • 語法: - $model-‐>delete() • 範例: $post = AppPost::find(1); $post-‐>delete();
23.
刪除資料 • 使⽤用 Facade
的 destroy ⽅方法 - ⽤用 primary key 刪除對應的資料,可⽀支援多筆刪除 • 語法: - Model::destroy(/* primary key */) • 範例: // 使⽤用 primary key 刪除⼀一筆資料 AppPost::destroy(1); // 使⽤用 array 刪除多筆資料 AppPost::destroy([1, 2, 3]); // 使⽤用多參數傳值刪除多筆資料 AppPost::destroy(1, 2, 3);
24.
更新資料 • 使⽤用 Model
的 update ⽅方法 - 先將資料庫取出 Model 實體,再從陣列更新資料, 陣列的 key 值⾃自動對應到資料表的欄位 • 語法: - $model-‐>update($array) • 範例: $post = AppPost::find(1); $post-‐>update([ 'title' => 'new title', 'sub_title' => 'new sub title', 'content' => 'new content', 'is_feature' => false, ]);
25.
儲存資料 • 使⽤用 Model
的 save ⽅方法 - 先取出 Model 實體後,再針對屬性更新,全部完成 後再存檔 • 語法: - $model-‐>save() • 範例: $post = AppPost::find(1); $post-‐>title = 'My New Title'; $post-‐>sub_title = 'My New Sub Title'; $post-‐>content = 'My New Content'; $post-‐>is_feature = false; $post-‐>save();
26.
資料表關聯 ★ 參考⽂文件:http://laravel.com/docs/5.1/eloquent-relationships
27.
資料表間的關聯
28.
Model 關聯類型 • A
擁有多個 B - ⼀一對多 - 例:⼀一個 Post 有很多個 Comment - hasMany() • B 歸屬於 A - ⼀一對多反向 - 例:每個 Comment 都會屬於⼀一個 Post - belongsTo()
29.
資料關聯設定 • 只要在 Model
內定義⾃自⼰己與其他 Model 間的關聯類 型,Laravel 就會⾃自動將這個關聯變成物件間的屬 性,在查詢時完全不需要⾃自⾏行下 SQL 語法 • 語法: • 範例: public function {另⼀一個 Model 的名稱(單/複數)}() { return $this-‐>{關聯類型}('{Model 名稱}'); } /* app/Post.php */ public function comments() { return $this-‐>hasMany('AppComment'); }
30.
透過 Model 取得關聯資料 •
由於 ORM 已經把資料表的 row 變成⼀一個物件,row 裡的資料變成物件的屬性值,⽽而物件間的關聯也⼀一 樣是屬性值,透過這個屬性值就可以取得關聯後的 Model,再⽤用⼀一樣的⽅方式印出該 Model 的資料即可 • 範例: // 先取得 Post 實體 $post = AppPost::find(1); echo $post-‐>title; // 把 Post 的 Comment 印出來 foreach($post-‐>comments as $comment) { // $post-‐>comments 是⼀一個 Collection // $comment 就是 Comment Model echo $comment-‐>content; }
31.
設定專案 Model
32.
專案資料庫設計
33.
設定 Model、測試 Eloquent •
設定三個 Model 內的 fillable 屬性 • 設定 Post 及 Comment 兩個 Model 的資料關聯 • 在 php artisan tinker 裡測試 Eloquent 的使⽤用⽅方 式 • 在 app/Http/routes.php 裡測試 Eloquent 的使⽤用⽅方式 • 練習 dd() 的使⽤用⽅方式
34.
存檔點 • 試著把現在已經可以運作的程式碼加⼊入版本控制內 • 流程提醒: -
working directory > staging area > commit
35.
單元總結 • 在這個單元裡我們學到了些什麼? - tinker
的使⽤用⽅方式 - Laravel 的 ORM 慣例及資料表關聯設定 - 使⽤用 ORM 來操作資料庫內的資料
36.
Q & A 歡迎提問討論
Télécharger maintenant