美文网首页
Laravel Eloquent 的隐藏特性

Laravel Eloquent 的隐藏特性

作者: 积_渐 | 来源:发表于2019-01-25 15:01 被阅读29次
    1. 获取原始属性
      当你修改了一条 Eloquent 记录后,你可以用 getOriginal() 来获取原来的属性。
    $user = App\User::first();
    $user->name;                   // John
    $user->name = "Peter";         // Peter
    $user->getOriginal('name');    // John
    $user->getOriginal();          // 原始的 $user 记录
    
    1. 检查模型是否更改
      用 isDirty() 去判断一个模型或者给定的属性是否被更改了。
    $user = App\User::first();
    $user->isDirty();          // false
    $user->name = "Peter";
    $user->isDirty();          // true
    

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

    $user->isDirty('name');    //true
    $user->isDirty('age');     //false
    
    1. 获取改变的属性
      获取模型中发生了变化的属性
    $user->getChanges()
     [
         "name" => "Peter",
      ]
    

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

    1. 自定义 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';
        }
    }
    
    1. 保存模型和关系
      你可以使用 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(); // 这会在数据库中同步更新用户和电话记录
    
    1. 重新加载新模型
      使用 fresh() 从数据库加载一个全新的模型实例。
    $user = App\User::first();
    $user->name;               // John
    // 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
    $updatedUser = $user->fresh(); 
    $updatedUser->name;       // Peter
    $user->name;              // John
    
    1. 重新加载现有模型
      你可以使用 refresh() 从数据库中的新值来重新加载现有模型。
    $user = App\User::first();
    $user->name;               // John
    // 用户记录通过另一个线程更新了。 例如: 'name' 改成了 // Peter。
    $user->refresh(); 
    $user->name;              // Peter
    

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

    1. 检查模型是否相同
      使用 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
    
    1. 克隆一个模型
      使用 replicate() 克隆一个模型。它将复制一个模型的副本到一个新的、不存在的实例中。
    $user = App\User::find(1);
    $newUser = $user->replicate();
    $newUser->save();
    
    1. 在 find()方法中指定属性
      使用 find() 或 findOrFail() 方法时,可以指定要选择的属性作为第二个参数。
    $user = App\User::find(1, ['name', 'age']);
    $user = App\User::findOrFail(1, ['name', 'age']);
    

    阅读原文

    相关文章

      网友评论

          本文标题:Laravel Eloquent 的隐藏特性

          本文链接:https://www.haomeiwen.com/subject/wdnmjqtx.html