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

小滕 小滕分享

一、自定义timestamp名字

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

  1. class User extends Model

  2. {

  3.    const CREATED_AT = 'created';

  4.    const UPDATED_AT = 'last_update';

  5.    const DELETED_AT = 'removed';

  6. }

二、exists属性

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

  1. $user = new User;

  2. $user->name = 'George';

  3. $user->email = 'george@example.com';

  4. $user->password = 'secret';

  5. $user->exists; // false

  6. $user->save();

  7. $user->exists; // true

三、脏数据检测

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

  1. $user = User::first();

  2. $user->isDirty(); // false

  3. $user->name = 'James';

  4. $user->isDirty(); // true

  5. $user->isDirty('email'); // false

  6. $user->isDirty('name'); // true

  7. $user->getDirty(); // ["name" => "James"]

四、原始数据

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

  1. $user = User::first();

  2. $user->name = 'James';

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

  4. $user->getOriginal('name'); // "George"

五、Clone一个模型

  1. $user = User::first();

  2. $clonedUser = $user->replicate();

六、将模型转换为数组

  1. // Convert a model instance to an array

  2. $user = User::first();

  3. $user->toArray();

  4. // Convert a collection to an array

  5. $users = User::all();

  6. $users->toArray();

七、刷新模型数据

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

  1. $user= User::where('name', 'George')->first();

  2. $user->name= 'James';

  3. $user->address->city = "New York";

  4. $user->refresh();

  5. $user->name; // "George"

  6. $user->address->city; // "Washington"

八、排除模型事件

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

  1. $user = User::withoutEvents(function () {

  2.    return factory(User::class)->create();

  3. });

九、Push方法

下面是更新关联数据:

  1. $user = User::where('name', 'George')->first();

  2. $user->age = 42;

  3. $user->address->city = "New York";

如果仅仅是调用

  1. $user->save();

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

  1. $user->push();

十、强迫删除

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

  1. $user = User::first();

  2. $user->forceDelete();

你知道几条?

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

温馨提示

如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。



    阅读原文
    已同步到看一看

    发送中