国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

laravel 學習筆記 —— 數據和模型起步篇

2019-11-06 06:42:55
字體:
來源:轉載
供稿:網友

Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM 實際上是 Laravel 框架數據庫組件的一個部分,也是最為重要和常用的,所以我們在說 Laravel 數據庫組件時,往往指的是 Eloquent ORM。當然,數據庫篇的文章肯定要全面講述,這樣有助于理解,也能幫助一些在這一塊遇到問題的朋友。

數據庫組件是一個比較獨立的組件,只依賴很少的東西,通過 composer 安裝的話,可以在任意一個項目里使用該組件的全部功能,而不需要安裝 laravel 框架。具體使用方法可到其 github 主頁獲?。篽ttps://github.com/illuminate/database

由于篇幅有限,且平時很忙,我將會將數據庫部分文章拆成包括本篇在內的多篇文章,本文作為概覽和文章預告,會對整個數據庫組件的構成做一個大致的講解。

漂亮的結構

Laravel 數據庫組件有著明確的分層,雖然沒有直白的說明,但仍舊能夠從文檔結構、代碼中明顯看得出來。筆者也會按每一層來講解,當然,由于 Eloquent ORM 占比最高,我將用兩個篇幅來著重講述。

組件大概分了三層:

數據庫連接層查詢構造層應用層

來看一下每一層有哪些東西,分別對應文檔的哪一部分:

數據庫連接層

數據庫連接層是整個數據庫組件依賴的基礎,這個不言而喻,但是這部分實際上從 文檔 都能夠看得出,本身更多是基于 PDO 的封裝,在此基礎上提供了以下幾個主要功能:

更為直觀易用的事務讀寫分離功能多種數據庫驅動兼容和切換數據庫事件

這一部分的功能可以通過 Facade 快捷調用(DB 類),文檔已有說明,很明顯,只要是使用過 PDO 或者 MySQLi 的都能夠快速上手使用參數綁定和 SQL 預處理功能。為了便于事件處理,這一部分對增刪改查四個操作每一個都封裝了一個方法,實際上調用方法一致(都是封裝的 PDO 和 PDOStatement 類的方法),僅產生的結果類型有所區別。

這一層很底層,對于需要直接手寫 SQL 操作數據庫的人可以通過這一層訪問,大多數情況下我們不會直接使用(不過事務很常用,我們會在后面的文章講到)。需要注意的是,作為底層,意味著數據庫組件后面所有的功能都是利用這一層實現的,因此這一層務必需要有一個了解。

了解 PDO 很重要,現代框架數據庫部分基本是基于 PDO 實現的。若是作為一名使用到 php 5.3 以后版本的 PHPer,連 PDO 都未曾使用甚至都不曾了解的,著實應當面壁,要知道 PDO 可是從 PHP 5.1 以后就已經是一個自帶擴展,隨 PHP 一同發布。

這一部分不會單獨成文介紹,而是會隨著下面這一部分,在下一篇文章中同時給出講述。

查詢構造層

查詢構造層由 查詢構造器 和 (語法)生成器 組成,是應用層和底層溝通的橋梁,其提供了流暢的訪問接口,使得開發者可以以務必優雅的形式創建查詢。雖然現代框架都提供了此類功能,但像 Laravel 這種利用很多 PHP 優秀特性來實現的,很少很少。

你可以通過這樣的方式查詢:

<?php$query = DB::table('users')->where('score', '>', 0)                           ->where(function (Builder $query) {                               $query->where('code', 'foo')                                     ->orWhere('name', 'like', 'Anvi%');                           })->skip(1)                           ->take(5)                           ->get();

最終會生成這樣的 SQL:

SELECT * FROM users WHERE score > 0 AND (code = 'foo' OR 'name' LIKE 'Anvi%') OFFSET 1 LIMIT 5;

可以看到,查詢構造層的查詢構造器提供了十分直觀的訪問方式,這種方式使得構建 SQL 語句的錯誤概率大大降低,而且由于是通過方法訪問,我們很容易對某一類查詢方式進行封裝(這個功能會在后文提到),以提高開發效率。

要時刻記住,所使用的 where 或 groupBy 這類方法,全部是查詢構造器提供的方法,要在開發中明確這一點,哪一些方法是由哪一層、哪一個類的實例對象提供的,這樣有助于避免不必要的錯誤,這一點我會在 Eloqent 的那一篇文章中著重講。

查詢構造器提供了優雅的訪問方法,而最終輸出 SQL 語句的則是(語法)生成器,他會根據當前所選的數據庫驅動生成對應的 SQL 語句,最后返回給查詢構造器,組合好用于綁定的參數,調用數據庫連接層返回查詢結果。

實際上,查詢構造器在數據庫組件有兩個,一個是基礎的原生查詢構造器,是查詢構造層提供的,還有個則是 Eloqent ORM 再次封裝的版本,提供了更為高級的關聯查詢方法,這個會在后續著重講解。

應用層

這一層就是我們長期使用的部分了,這一層包含了三個大組件:Eloquent ORM、MigrationSchema

這三個皆是基于查詢構造層實現的,Eloquent 出場率最高,當然后兩個也很重要,分別是數據遷移和結構生成器,而數據遷移組件和結構生成器作為 最佳組件 CP 往往成雙成對的出現,對這兩位我會單獨開篇介紹的。

Eloquent 作為最最重要的部分,戲份也最多,我將分為幾個篇章來介紹:

模型與數據庫(一些思想上的東西)Eloquent ORM 基礎 (講解 Laravel 的模型,Eloquent 基礎,集合)Eloquent ORM 高級運用 (可復用查詢封裝,事件的運用,Getter 與 Setter)關聯查詢(各種關聯模型的運用實例,關聯查詢各種問題,由于內容很多,將會分為兩篇來講)

關于數據遷移和結構生成器則會在一篇內介紹。

由于數據庫這一塊內容非常之多,我需要慢慢整理很多東西,水平原因,期間不可避免會出現很多紕漏,也希望各路大神予以批評和指正。

作為開篇,即是作為剛要給我補完的方向,亦是一個引導內容,因此在后續文章發布過程中會不可避免的發生些許變動,所以也請各位關注的朋友多多留意~

感謝博主:https://www.insp.top/article/learn-laravel-database-and-model-foundation


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临洮县| 蓬安县| 冕宁县| 定州市| 丘北县| 堆龙德庆县| 忻州市| 东阿县| 陕西省| 客服| 夏河县| 曲沃县| 西宁市| 涪陵区| 镇康县| 建昌县| 吴忠市| 祁门县| 沧源| 逊克县| 阜康市| 永兴县| 易门县| 乌海市| 枝江市| 木里| 永昌县| 西贡区| 宕昌县| 古丈县| 酒泉市| 宁阳县| 东阳市| 礼泉县| 宁国市| 普宁市| 高阳县| 盈江县| 比如县| 比如县| 巫山县|