----题记,写东西排版很丑;假期复习下md,到时拿本篇开涮
1. 默认laravel的model如果使用了 SoftDeletes Trait 则 会对表的delete 方法使用软删除;
1.1 如果仍要硬删,则使用 forceDelete 方法;
1.2 如果查询时候不需要带入deleted_at条件,则需要调用 withTrashed 方法,建议无删除逻辑的select都加上,数据量多的时候,where默认带的deleted_at还是需要优化的
1.3 如果表不带有deleted_at ,Model 层则可以不再使用 SoftDeletes Trait;此时delete 使用的硬删
1.4 如果你基类强制使用了 SoftDeletes Trait;
1.4.1 你某张表想给deleted_at换个名字,则在该model中定义
const DELETED_AT = null;//使用软删的表中deleted_at字段名
1.4.2 你某张表不想使用、定义deleted_at , 即废弃基类的软删限制;则可以如下:
public static function bootSoftDeletes() {}//覆盖trait 的软删逻辑
2. 相应的 created_at 和 updated_at 如果换名的话,可以指定model的
const CREATED_AT = null; const UPDATED_AT = null;
3.关于 created_at 和 updated_at,deleted_at
3.1 以下定义 只会影响, model/query调用 update insert 时候 不会set 对应字段;但是如果使用了SoftDeletes trait,则会update 默认加上 and `company_commission_ext`.`` is null//如果DElETED_AT=null
因为 这个scope是全局的
const CREATED_AT = null; const UPDATED_AT = null; const DELETED_AT = null;
4. 其他
4.1 关于model的fillable 和 guarded 数组属性; 两者互补,如果你懒得定义一长串填充(fillable )白名单, 则你可以偷懒使用 guarded 定义少量的不可填充字段。
4.2 关于model的fillable 和 guarded 调用何时生效;如果走Model层级,比如 new Model($attrs )->save(),update(), 则定义的约束会生效;
4.3 关于model的fillable 和 guarded 调用何时失效;如果走
\Illuminate\Database\Eloquent\Builder
对象,比如Model::query 或者Model->new Query(),再去 insert(), update(),则 会失效
来源:oschina
链接:https://my.oschina.net/u/3659172/blog/4943243