小滕的博客

小滕的技术点滴

10个你可能不知道的Laravel Eloquent功能

1 month ago · 1 MIN READ
#Laravel 

一、自定义timestamp名字

Laravel 模型默认的有 created_atupdated_at 名字的时间戳字段,这里,你可以通过定义属性来覆盖它们。

class User extends Model
{
    const CREATED_AT = 'created';
    const UPDATED_AT = 'last_update';
    const DELETED_AT = 'removed';
}

二、exists属性

exists 属性可以检测当前模型的记录是否在数据库中存在。

$user = new User;
$user->name = 'George';
$user->email = 'george@example.com';
$user->password = 'secret';
$user->exists; // false
$user->save();
$user->exists; // true

三、脏数据检测

你可以使用 isDirty() 方法来检测某个模型的的属性是否发生了改变,另外你可以通过 getDirty() 方法来获取到发生改变的属性和它改变的值。

$user = User::first();
$user->isDirty(); // false
$user->name = 'James';
$user->isDirty(); // true
$user->isDirty('email'); // false
$user->isDirty('name'); // true
$user->getDirty(); // ["name" => "James"]

四、原始数据

在开发中,我们可能在改变模型值之后,又想获取到该模型的原始值,那么我们就可以通过 getOriginal() 方法啦。

$user = User::first();
$user->name = 'James';

$user->getOriginal(); // Array with "name" => "George"
$user->getOriginal('name'); // "George"

五、Clone一个模型

$user = User::first();
$clonedUser = $user->replicate();

六、将模型转换为数组

// Convert a model instance to an array
$user = User::first();
$user->toArray();
// Convert a collection to an array
$users = User::all();
$users->toArray();

七、刷新模型数据

我们可以调用 refresh() 方法获取该模型在数据库中最新的值。

$user= User::where('name', 'George')->first();
$user->name= 'James';
$user->address->city = "New York";
$user->refresh();
$user->name; // "George"
$user->address->city; // "Washington"

八、排除模型事件

Laravel 默认有需要模型事件,如:creating, created, saved 等,下面的方法可以直接跳过这些事件:

$user = User::withoutEvents(function () {
    return factory(User::class)->create(); 
});

九、Push方法

下面是更新关联数据:

$user = User::where('name', 'George')->first();
$user->age = 42;
$user->address->city = "New York"; 

如果仅仅是调用

$user->save();

那么关联数据的变动是不会保存的。这个时候我们可以:

$user->push();

十、强迫删除

如果我们使用了软删除,那么该如何从数据库中彻底的删除这条数据呢?可以这样:

$user = User::first();
$user->forceDelete();

你知道几条?

转载自:https://medium.com/swlh/10-eloquent-features-that-you-might-not-know-about-75d8221d4adc

···

xiao teng



备案号:皖ICP备14012032号-5