對於使用 Laravel 的開發者來講,可能都會驚歎於 Eloquent Model 的強大,可是在強大的表面之下,其實仍是有不少不爲人知的特性的,本文即來分享十個 Laravel Eloquent 的強大特性。數據庫
1.更強大的 find() 方法
不少開發者在使用 find()
方法的時候,一般就只是在這裏傳入一個 ID 的參數,其實咱們也是能夠傳入第二個參數的:在 find()
方法中指定須要查找的字段app
$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']); // 這裏面的 name 和 age 字段就是制定只查找這兩個字段
2.克隆 Model
直接使用 replicate()
方法便可,這樣咱們就很容易地建立一個 Model 的副本:this
$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save(); // 這樣,$newUser 和 $user 的基本數據就是同樣的
3.檢查 Model 是否相同
使用 is()
方法檢查兩個 Model 的 ID 是否一致,是否在同一個表中:code
$user = App\User::find(1); $sameUser = App\User::find(1); $diffUser = App\User::find(2); $user->is($sameUser); // true $user->is($diffUser); // false
4.在關聯模型中同時保存數據
使用 push()
你能夠在保存模型數據的同時,將所關聯的數據也保存下來:開發
class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } } $user = User::first(); $user->name = "GeiXue"; $user->phone->number = '1234567890'; $user->push(); // 最後這一行 push() 會將 user 的數據和 phone 的數據同時更新到數據庫中
5.自定義 deleted_at 字段
若是你使用過 Laravel 的軟刪除 Soft Delete 的話,你應該就知道其實 Laravel 在標記一個記錄爲已刪除的狀態實際上是用 deleted_at
這個字段來維護的,其實你是能夠自定義這個字段的:get
class User extends Model { use SoftDeletes; * The name of the "deleted at" column. * * @var string */ const DELETED_AT = 'deleted_date'; }
或者你這樣自定義也能夠:string
class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'deleted_date'; } }
6.獲取已修改的 Model 屬性
使用 getChanges()
方法獲取已被修改的屬性:io
$user->getChanges() //[ "name" => "GeiXue", ]
7.檢查 Model 是否被修改
使用 isDirty()
方法就能夠檢測模型中的數據是否被修改:function
$user = App\User::first(); $user->isDirty(); //false $user->name = "GeiXue"; $user->isDirty(); //true
在使用 isDirty()
的時候,你也能夠直接檢測某個屬性是否被修改:class
$user->isDirty('name'); //true $user->isDirty('age'); //false
8.獲取 Model 的原始數據
在給 Model 的屬性賦予新值的時候,你能夠經過 getOriginal()
來獲取原來的值:
$user = App\User::first(); $user->name; //JellyBool $user->name = "GeiXue"; //GeiXue $user->getOriginal('name'); //JellyBool $user->getOriginal(); //Original $user record
9.刷新 Model 的數據
使用 refresh()
刷新 Model 的數據,這在你使用 tinker
的時候特別有用:
$user = App\User::first(); $user->name; // JellyBool // 這個時候在其餘地方,該用戶的名字被更新爲 GeiXue,你可使用 refresh 來刷新,而不用退出 tinker $user->refresh(); $user->name; // GeiXue
最後
上面的九個 Eloquent 特性其實在特定的應用場景是很是有用的,但願能在你開發 Laravel 項目的時候幫到你一點點。Happy Hacking