PHP ORM 詳解
在現(xiàn)代 Web 開發(fā)中,很少有開發(fā)者不知道 ORM(Object-Relational Mapping)的,但其中有一種非常流行的 PHP ORM 并不廣為人知,它就是 Laravel 的 Eloquent。Eloquent 可以輕松地將數(shù)據(jù)庫表轉(zhuǎn)化成對(duì)象,讓開發(fā)者能夠通過面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫,這無疑是提高開發(fā)效率的好助手。本文將詳細(xì)介紹 PHP ORM 中的 Eloquent。
Eloquent 基礎(chǔ)
Eloquent 是在 Laravel 框架中內(nèi)置的 ORM 工具,它提供了很多與數(shù)據(jù)模型相關(guān)的方法,可以使開發(fā)者更加方便、快速地操作數(shù)據(jù)庫。讓我們看看以下的代碼,它是一個(gè)簡單的 Eloquent 模型:
這個(gè)模型定義了一個(gè)數(shù)據(jù)庫表 users 對(duì)應(yīng)的 Eloquent 模型,我們可以通過這個(gè)模型方便地查詢和操作數(shù)據(jù)庫。接下來讓我們更進(jìn)一步地探究 Eloquent 各個(gè)方面。
定義 Eloquent 模型
我們可以通過定義 Eloquent 模型來操作數(shù)據(jù)庫,可以通過以下方式:
在這個(gè)例子中,Post 是我們模型的名字,它的默認(rèn)表名為 post,模型繼承自 Model 類。
Eloquent 數(shù)據(jù)類型
在訪問數(shù)據(jù)庫時(shí),Eloquent 支持以下數(shù)據(jù)類型:
- string:string 數(shù)據(jù)類型表示字符串。 - int:int 數(shù)據(jù)類型表示整數(shù)。 - boolean:boolean 數(shù)據(jù)類型表示 true 或 false。 - date:date 數(shù)據(jù)類型表示日期。Eloquent 對(duì) date 類型的支持就像它處理 timestamps 一樣。 - datetime:datetime 數(shù)據(jù)類型表示日期和時(shí)間。 - timestamp:timestamp 數(shù)據(jù)類型自動(dòng)處理了 created_at 和 updated_at 字段。該數(shù)據(jù)類型存儲(chǔ)時(shí)間戳整數(shù)。
設(shè)定表名和主鍵
每個(gè) Eloquent 模型必須關(guān)聯(lián)一個(gè)數(shù)據(jù)庫表。我們可以使用 ORM 來指定數(shù)據(jù)庫表名稱、主鍵等信息,例如:
上面的代碼中,我們指定了表的名稱“my_posts”和主鍵“post_id”,類似地,我們可以通過其他屬性來定義自己的 Eloquent 模型。
查詢數(shù)據(jù)
可以使用 Eloquent 模型中的兩個(gè)方法來查詢數(shù)據(jù)庫:all 和 find。如下:
all 方法返回模型對(duì)應(yīng)表中的所有記錄,而 find 方法返回主鍵對(duì)應(yīng)的記錄。
條件查詢
除了 all 和 find 方法外,我們還可以使用各種方法來篩選數(shù)據(jù)。如下:
以上代碼將從表 users 中獲取所有名字以字母 T 開頭的用戶。where 方法可以加入各種不同的比較運(yùn)算符和表達(dá)式。
排序
我們也可以使用 orderBy 方法對(duì)查詢結(jié)果進(jìn)行排序。如下:
以上代碼將按照名字降序排列所有用戶。除了 desc 外,還可以使用 asc 進(jìn)行升序排序。
聚合查詢
Eloquent 還支持各種類型的聚合查詢。以下代碼將計(jì)算用戶表中所有用戶的平均年齡:
以上標(biāo)準(zhǔn)的聚合查詢還包括:count、sum、min 和 max。
插入和更新
在 Eloquent 中插入和更新數(shù)據(jù)非常簡單。以下代碼將創(chuàng)建一個(gè)新的用戶:
可以使用類似的方法進(jìn)行更新:
刪除數(shù)據(jù)
以下代碼將刪除 ID 為 1 的用戶:
以上就是 Eloquent 中幾乎所有可能用到的操作,通過這個(gè)簡單易懂的 ORM 工具,我們可以快速地開發(fā) Web 應(yīng)用程序。
在現(xiàn)代 Web 開發(fā)中,很少有開發(fā)者不知道 ORM(Object-Relational Mapping)的,但其中有一種非常流行的 PHP ORM 并不廣為人知,它就是 Laravel 的 Eloquent。Eloquent 可以輕松地將數(shù)據(jù)庫表轉(zhuǎn)化成對(duì)象,讓開發(fā)者能夠通過面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫,這無疑是提高開發(fā)效率的好助手。本文將詳細(xì)介紹 PHP ORM 中的 Eloquent。
Eloquent 基礎(chǔ)
Eloquent 是在 Laravel 框架中內(nèi)置的 ORM 工具,它提供了很多與數(shù)據(jù)模型相關(guān)的方法,可以使開發(fā)者更加方便、快速地操作數(shù)據(jù)庫。讓我們看看以下的代碼,它是一個(gè)簡單的 Eloquent 模型:
<?php <br> namespace App; <br> use Illuminate\Database\Eloquent\Model; <br> class User extends Model { // }
這個(gè)模型定義了一個(gè)數(shù)據(jù)庫表 users 對(duì)應(yīng)的 Eloquent 模型,我們可以通過這個(gè)模型方便地查詢和操作數(shù)據(jù)庫。接下來讓我們更進(jìn)一步地探究 Eloquent 各個(gè)方面。
定義 Eloquent 模型
我們可以通過定義 Eloquent 模型來操作數(shù)據(jù)庫,可以通過以下方式:
<?php <br> namespace App; <br> use Illuminate\Database\Eloquent\Model; <br> class Post extends Model { // }
在這個(gè)例子中,Post 是我們模型的名字,它的默認(rèn)表名為 post,模型繼承自 Model 類。
Eloquent 數(shù)據(jù)類型
在訪問數(shù)據(jù)庫時(shí),Eloquent 支持以下數(shù)據(jù)類型:
- string:string 數(shù)據(jù)類型表示字符串。 - int:int 數(shù)據(jù)類型表示整數(shù)。 - boolean:boolean 數(shù)據(jù)類型表示 true 或 false。 - date:date 數(shù)據(jù)類型表示日期。Eloquent 對(duì) date 類型的支持就像它處理 timestamps 一樣。 - datetime:datetime 數(shù)據(jù)類型表示日期和時(shí)間。 - timestamp:timestamp 數(shù)據(jù)類型自動(dòng)處理了 created_at 和 updated_at 字段。該數(shù)據(jù)類型存儲(chǔ)時(shí)間戳整數(shù)。
設(shè)定表名和主鍵
每個(gè) Eloquent 模型必須關(guān)聯(lián)一個(gè)數(shù)據(jù)庫表。我們可以使用 ORM 來指定數(shù)據(jù)庫表名稱、主鍵等信息,例如:
<?php <br> namespace App; <br> use Illuminate\Database\Eloquent\Model; <br> class Post extends Model { protected $table = 'my_posts'; <br> protected $primaryKey = 'post_id'; <br> protected $keyType = 'string'; <br> public $incrementing = false; <br> protected $dates = [ 'created_at', 'updated_at', 'deleted_at', ]; }
上面的代碼中,我們指定了表的名稱“my_posts”和主鍵“post_id”,類似地,我們可以通過其他屬性來定義自己的 Eloquent 模型。
查詢數(shù)據(jù)
可以使用 Eloquent 模型中的兩個(gè)方法來查詢數(shù)據(jù)庫:all 和 find。如下:
$users = User::all(); <br> $user = User::find(1);
all 方法返回模型對(duì)應(yīng)表中的所有記錄,而 find 方法返回主鍵對(duì)應(yīng)的記錄。
條件查詢
除了 all 和 find 方法外,我們還可以使用各種方法來篩選數(shù)據(jù)。如下:
$users = User::where('name', 'like', 'T%')->get();
以上代碼將從表 users 中獲取所有名字以字母 T 開頭的用戶。where 方法可以加入各種不同的比較運(yùn)算符和表達(dá)式。
排序
我們也可以使用 orderBy 方法對(duì)查詢結(jié)果進(jìn)行排序。如下:
$users = User::orderBy('name', 'desc')->get();
以上代碼將按照名字降序排列所有用戶。除了 desc 外,還可以使用 asc 進(jìn)行升序排序。
聚合查詢
Eloquent 還支持各種類型的聚合查詢。以下代碼將計(jì)算用戶表中所有用戶的平均年齡:
$averageAge = User::avg('age');
以上標(biāo)準(zhǔn)的聚合查詢還包括:count、sum、min 和 max。
插入和更新
在 Eloquent 中插入和更新數(shù)據(jù)非常簡單。以下代碼將創(chuàng)建一個(gè)新的用戶:
$user = new User; <br> $user->name = 'Taylor'; <br> $user->email = 'taylor@laravel.com'; <br> $user->save();
可以使用類似的方法進(jìn)行更新:
$user = User::find(1); <br> $user->name = 'Steve'; <br> $user->save();
刪除數(shù)據(jù)
以下代碼將刪除 ID 為 1 的用戶:
$user = User::find(1); <br> $user->delete();
以上就是 Eloquent 中幾乎所有可能用到的操作,通過這個(gè)簡單易懂的 ORM 工具,我們可以快速地開發(fā) Web 應(yīng)用程序。
上一篇php order方法
下一篇php pear log