laravel created_at updated_at deleted_at 种种

与世无争的帅哥 提交于 2021-02-03 11:40:24

----题记,写东西排版很丑;假期复习下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(),则 会失效

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!