你可能不知道的 10 個 Laravel Eloquent 的隱藏特性

leienshu發表於2019-01-25

Laravel 是一個功能豐富的框架。 但是,你無法在官方文件中找到所有可用的功能。 以下就是你可能不知道的一些功能。

當你修改了一條 Eloquent 記錄後,你可以用 getOriginal() 來獲取原來的屬性。

$user = App\User::first();
$user->name;                   // John
$user->name = "Peter";         // Peter
$user->getOriginal('name');    // John
$user->getOriginal();          // 原始的 $user 記錄

用 isDirty() 去判斷一個模型或者給定的屬性是否被更改了。

$user = App\User::first();
$user->isDirty();          // false
$user->name = "Peter";
$user->isDirty();          // true

你也可以檢查一個指定的屬性是否改變了。

$user->isDirty('name');    //true
$user->isDirty('age');     //false

獲取模型中發生了變化的屬性

$user->getChanges()
//[
     "name" => "Peter",
  ]

注意:僅當您使用syncChanges()儲存模型或同步更改時,更改才會顯示。

預設情況下,Laravel 使用 deleted_at 列來處理軟刪除。 您可以通過明確定義 DELETED_AT 屬性來更改此設定。

class User extends Model
{
    use SoftDeletes;

     * 定義 "deleted at" 列的名字.
     *
     * @var string
     */
    const DELETED_AT = 'is_deleted';
}

或者定義一個訪問方法。

class User extends Model
{
    use SoftDeletes;

    public function getDeletedAtColumn()
    {
        return 'is_deleted';
    }
}

你可以使用 push() 方法來定義模型和它通訊的關係。

class User extends Model
{
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}
$user = User::first();
$user->name = "Peter";
$user->phone->number = '1234567890';
$user->push(); // 這會在資料庫中同步更新使用者和電話記錄

使用 fresh() 從資料庫載入一個全新的模型例項。

$user = App\User::first();
$user->name;               // John
// 使用者記錄通過另一個執行緒更新了。 例如: 'name' 改成了 // Peter。
$updatedUser = $user->fresh(); 
$updatedUser->name;       // Peter
$user->name;              // John

你可以使用 refresh() 從資料庫中的新值來重新載入現有模型。

$user = App\User::first();
$user->name;               // John
// 使用者記錄通過另一個執行緒更新了。 例如: 'name' 改成了 // Peter。
$user->refresh(); 
$user->name;              // Peter

注意: refresh() 還將更新現有模型的載入關係。

使用 is() 判定兩個模型是否有相同的ID並且屬於同一張表。

$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);
$user->is($sameUser);       // true
$user->is($diffUser);       // false

使用 replicate() 克隆一個模型。它將複製一個模型的副本到一個新的、不存在的例項中。

$user = App\User::find(1);
$newUser = $user->replicate();
$newUser->save();

使用 find() 或 findOrFail() 方法時,可以指定要選擇的屬性作為第二個引數。

$user = App\User::find(1, ['name', 'age']);
$user = App\User::findOrFail(1, ['name', 'age']);

怎麼樣,以上 10個 Laravel Eloquent 中的隱藏特性你知道幾個呢?希望對你們有幫助!

求知若飢,虛心若愚!

相關文章