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('AppPhone', 'foreign_key', 'local_key'),主表为当前模型,外键为关联模型主键。
2、定义反向关联,return $this->belongsTo('AppUser', 'foreign_key', 'other_key'),主表为关联模型,外键为当前模型主键。
4、对象转换器
1、日期转换器:默认情况下,Eloquent 会将 created_at
和 updated_at
字段转换为 Carbon 实例,它继承了 PHP 原生的 DateTime
类并提供了各种有用的方法。当某个字段是日期格式时,你可以将值设置为一个 UNIX 时间戳,日期时间 (Y-m-d
) 字符串,或者 DateTime
/ Carbon
实例。日期值会被正确格式化并保存到你的数据库中。
2、属性类型转换器:模型中的 $casts
属性提供了一个便利的方法来将属性转换为常见的数据类型。$casts
属性应是一个数组,且数组的键是那些需要被转换的属性名称,值则是你希望转换的数据类型。支持转换的数据类型有: integer
, real
, float
,double
, decimal:<digits>
,string
, boolean
, object
, array
,collection
, date
, datetime
, 和 timestamp
。 当需要转换为 decimal
类型时,你需要定义小数位的个数,如: decimal:2