你可能不知道的 Laravel Eloquent 小技巧

1. 获取原始属性

当修改一条 Eloquent 模型记录的时候你可以通过调用 getOriginal() 方法获取记录的原始属性

$user = AppUser::first();
$user->name;                   //John

$user->name = "Peter";         //Peter

$user->getOriginal('name');    //John
$user->getOriginal();          //原始 $user 记录

2. 检查模型是否被修改

使用 isDirty() 方法确定模型或给定属性是否已被修改

$user = AppUser::first();
$user->isDirty();          //false

$user->name = "Peter";
$user->isDirty();          //true

也可以检查指定属性是否被修改。

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

3. 获取更改的属性

使用 getChanges() 获取更改的属性

$user->getChanges()

//[
     "name" => "Peter",
  ]

注:仅当您使用 syncChanges() 保存模型或同步更新时,才生效

4. 定义 deleted_at 字段

默认情况下,Laravel 使用 deleted_at 字段处理软删除。 您可以通过定义 DELETED_AT 属性来更改它。

class User extends Model
{
    use SoftDeletes;

     * The name of the "deleted at" column.
     *
     * @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('AppPhone');
    }
}

$user = User::first();
$user->name = "Peter";

$user->phone->number = '1234567890';

$user->push(); // 这将更新数据库中的用户和电话

6. 重新加载模型

使用 fresh() 重新从数据库加载一个模型。

$user = AppUser::first();
$user->name;               // John

// user 表被其他进程修改。 例:数据库又插入一条 “name” 为 “Peter” 的数据。

$updatedUser = $user->fresh();
$updatedUser->name;       // Peter

$user->name;              // John

7. 重新加载现有模型

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

$user = AppUser::first();
$user->name;               // John

// user 表被其他进程修改。例: “name” 被修改为 “Peter” 。

$user->refresh();
$user->name;              // Peter

注: refresh() 也会更新模型的关联模型数据。

8. 检查模型是否为同一个

使用 is() 方法确定两个模型是否拥有相同主键并且属于同一张表。

$user = AppUser::find(1);
$sameUser = AppUser::find(1);
$diffUser = AppUser::find(2);

$user->is($sameUser);       // true
$user->is($diffUser);       // false

9. 克隆一个模型#

你可以使用 replicate() 方法来复制一个模型到一个新的对象中。

$user = AppUser::find(1);
$newUser = $user->replicate();

$newUser->save();

10. 在 find() 方法中指定查找的属性#

当使用 find() 或 findOrFail() 方法时,传入第二个参数可以指定需要查找的属性。

$user = AppUser::find(1, ['name', 'age']);

$user = AppUser::findOrFail(1, ['name', 'age']);

模型属性

 /**
  * 为模型指定一个连接名称。
  *
  * @var string
  */
 protected $connection = 'connection-name';


/**
 * 为模型指定一个表名。
 *
 * @var string
 */
 protected $table = 'users';


/**
 * 为模型指定主键。
 *
 * @var string
 */
 protected $primaryKey = 'user_id';


 /**
  * 自定义主键类型。
  *
  * @var string
  */
 protected $keyType = 'string';


 /**
  * 如果使用的是非递增或者非数字的主键。
  *
  * @var bool
  */
 public $incrementing = false;


class Post extends Model
{
 /**
  * 加载模型关联数据。
  * 
  * @var array
  */
  protected $with = [
      'comments'
  ];
}

public static function delete() 
{
    self::whereIn('id', $ids)->delete(); //删除用户
    withTrashed() 显示所有数据
    onlyTrashed() 显示删除数所
    restore()还原数据
}

class Post extends Model
{
 /**
  * 加载模型关联数据数量。
  * 
  * @var array
  */
  protected $withCount = [
      'comments'
  ];
}


 /**
  * 执行模型是否自动维护时间戳.
  *
  * @var bool
  */
 public $timestamps = false;


/**
 * 可以被批量赋值的属性。
 *
 * @var array
 */
 protected $fillable = ['name', 'age'];


 /**
  * 不可被批量赋值的属性,当 $guarded 为空数组时则所有属性都可以被批量赋值。
  *
  * @var array
  */
 protected $guarded = ['price'];    

guarded 与 fillable,在当前模型中只能存在一者。


 /**
  * 创建时间戳字段名称。
  *
  * @var string
  */
 const CREATED_AT = 'created_at';   


 /**
  * 更新时间戳字段名称。
  *
  * @var string
  */
 const UPDATED_AT = 'updated_at';   





 const STATUS_CREATED = 'created';

 /**
  * 给定字段默认值。
  *
  * @var array
  */
 protected $attributes = [
     'status' => self::STATUS_CREATED,
 ];


 /**
  * 字段转换为对应的类型。
  *
  * @var array
  */
 protected $casts = [
    'id' => 'integer',
    'settings' => 'array',
    'is_admin' => 'boolean',
 ];


 /**
  * 需要转换成日期的属性。
  *
  * @var array
  */
 protected $dates = ['deleted_at'];


 /**
  * 模型中日期字段的保存格式。
  *
  * @var string
  */
 protected $dateFormat = 'U';


 /**
  * 追加到模型数组表单的访问器。
  *
  * @var array
  */
 protected $appends = ['is_admin'];


 /**
  * 数组中的属性会被隐藏。
  *
  * @var array
  */
 protected $hidden = ['password'];


 /**
  * 数组中的属性会被展示。
  *
  * @var array
  */
 protected $visible = ['first_name', 'last_name'];


 /**
  * 模型的事件映射。
  *
  * @var array
  */
 protected $dispatchesEvents = [
     'saved' => UserSaved::class,
     'deleted' => UserDeleted::class,
 ];



 /**
  * 指示模型当前是否强制删除。
  *
  * @var bool
  */
 protected $forceDeleting = false;


 /**
  * 默认分页数量。
  *
  * @var int
  */
 protected $perPage = 50;



 /**
  * 更新添加的关联模型的 updated_at 字段。
  *
  * @var array
  */
 protected $touches = ['post'];

原文地址:https://www.cnblogs.com/caibaotimes/p/14050647.html