你可能不知道的 10 个 Laravel Eloquent 的隐藏特性

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

1. 获取原始属性

当你修改了一条 Eloquent 记录后,你可以用 getOriginal() 来获取原来的属性。

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

2. 检查模型是否更改

用 isDirty() 去判断一个模型或者给定的属性是否被更改了。

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

你也可以检查一个指定的属性是否改变了。

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

3. 获取改变的属性

获取模型中发生了变化的属性

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

注意:仅当您使用syncChanges()保存模型或同步更改时,更改才会显示。

4. 自定义 deleted_at 列

默认情况下,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';
    }
}

5. 保存模型和关系

你可以使用 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(); // 这会在数据库中同步更新用户和电话记录

6. 重新加载新模型

使用 fresh() 从数据库加载一个全新的模型实例。

$user = App\User::first();
$user->name;               // John
// 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
$updatedUser = $user->fresh(); 
$updatedUser->name;       // Peter
$user->name;              // John

7. 重新加载现有模型

你可以使用 refresh() 从数据库中的新值来重新加载现有模型。

$user = App\User::first();
$user->name;               // John
// 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
$user->refresh(); 
$user->name;              // Peter

注意: refresh() 还将更新现有模型的加载关系。

8. 检查模型是否相同

使用 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

9. 克隆一个模型

使用 replicate() 克隆一个模型。它将复制一个模型的副本到一个新的、不存在的实例中。

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

10. 在 find()方法中指定属性

使用 find() 或 findOrFail() 方法时,可以指定要选择的属性作为第二个参数。

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

怎么样,以上 10个 Laravel Eloquent 中的隐藏特性你知道几个呢?希望对你们有帮助!

你可能不知道的 10 个 Laravel Eloquent 的隐藏特性
Tagged on: laravel

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Comment

Name *

Website

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值