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 中的隱藏特性你知道幾個呢?希望對你們有幫助!