laravel ORM随笔小结

1、软删除

除了真实删除数据库记录, Eloquent 也可以「软删除」模型。软删除的模型并不是真的从数据库中删除了。事实上,是在模型上设置了 deleted_at 属性并将其值写入数据库。如果 deleted_at 值非空,代表这个模型已被软删除。

如果要开启模型软删除功能,模型引用use SoftDeletes,SoftDeletes trait 会自动将 deleted_at 属性转换成 DateTime / Carbon 实例

deleted_at 字段添加到数据表中,使用$table->softDeletes(),

软删除之后在模型实例上使用 delete 方法, 当前日期时间会写入 deleted_at 字段。同时,查询出来的结果也会自动排除已被软删除的记录。使用 withTrashed 方法来获取包括软删除模型在内的模型,onlyTrashed 方法 只 获取已软删除的模型;

有时会对软删除模型进行 「撤销」,在已软删除的数据上使用 restore 方法即可恢复到有效状态:

附带两个永久删除代码:

// 单个模型实例的永久删除... $flight->forceDelete();

// 关联模型的永久删除... $flight->history()->forceDelete();

2、匿名全局作用域

class User extends Model {

  /**

  *模型的「启动」方法.

  *

  * @return void

  */

  protected static function boot() {

    parent::boot();

    static::addGlobalScope('age', function (Builder $builder) {

      $builder->where('age', '>', 200);

    });

  }

}

3、定义关联关系

1、模型关联定义,return $this->hasOne('App\Phone', 'foreign_key', 'local_key'),主表为当前模型,外键为关联模型主键。

2、定义反向关联,return $this->belongsTo('App\User', 'foreign_key', 'other_key'),主表为关联模型,外键为当前模型主键。

4、对象转换器

1、日期转换器:默认情况下,Eloquent 会将 created_at 和 updated_at 字段转换为 Carbon 实例,它继承了 PHP 原生的 DateTime 类并提供了各种有用的方法。当某个字段是日期格式时,你可以将值设置为一个 UNIX 时间戳,日期时间 (Y-m-d) 字符串,或者 DateTime / Carbon 实例。日期值会被正确格式化并保存到你的数据库中。

2、属性类型转换器:模型中的 $casts 属性提供了一个便利的方法来将属性转换为常见的数据类型。$casts 属性应是一个数组,且数组的键是那些需要被转换的属性名称,值则是你希望转换的数据类型。支持转换的数据类型有: integerreal, floatdouble, decimal:<digits>stringboolean, objectarraycollection, date, datetime, 和 timestamp。 当需要转换为 decimal 类型时,你需要定义小数位的个数,如: decimal:2

 

posted @ 2019-08-23 16:18  怼宝灿灿  阅读(233)  评论(0编辑  收藏  举报