介紹9個有用的Laravel Eloquent的特性

藏色散人
發布: 2021-03-17 09:12:13
轉載
2058 人瀏覽過

以下由laravel教學專欄為大家介紹分享九個有用的 Laravel Eloquent 的特性,希望對需要的朋友有幫助!

介紹9個有用的Laravel Eloquent的特性

九個有用的Laravel Eloquent 的特性

對於使用Laravel 的開發者來說,可能都會驚嘆於Eloquent Model 的強大,但是在強大的表面之下,其實還是有很多鮮為人知的特性的,本文即來分享十個Laravel Eloquent 的強大特性。

1.更強大的find() 方法
很多開發者在使用find()方法的時候,通常就只是在這裡傳入一個ID 的參數,其實我們也是可以傳入第二個參數的:find()方法中指定需要尋找的欄位

$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']); // 这里面的 name 和 age 字段就是制定只查找这两个字段
登入後複製

2 .克隆Model
直接使用replicate()方法即可,這樣我們就很容易地建立一個Model 的副本:

$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save(); // 这样,$newUser 和 $user 的基本数据就是一样的
登入後複製

3.檢查Model是否相同
使用is()方法檢查兩個Model 的ID 是否一致,是否在同一個表中:

$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這個欄位來維護的,其實你是可以自訂這個欄位的:

class User extends Model { use SoftDeletes; * The name of the "deleted at" column. * * @var string */ const DELETED_AT = 'deleted_date'; }
登入後複製

或你這樣自訂也可以:

class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'deleted_date'; } }
登入後複製

6.取得已修改的Model 屬性
#使用getChanges()方法取得已修改的屬性:

$user->getChanges() //[ "name" => "GeiXue", ]
登入後複製

7.檢查Model 是否已修改
使用isDirty()方法就可以偵測模型中的資料是否被修改:

$user = App\User::first(); $user->isDirty(); //false $user->name = "GeiXue"; $user->isDirty(); //true
登入後複製

在使用isDirty()的時候,你也可以直接偵測某個屬性是否被修改:

$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 專案的時候幫到你一點點。

以上是介紹9個有用的Laravel Eloquent的特性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:segmentfault.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!