首頁  >  文章  >  php框架  >  介紹9個有用的Laravel Eloquent的特性

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

藏色散人
藏色散人轉載
2021-03-16 17:16:242073瀏覽

以下由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刪除