Laravel deleted_at is Null 软删除查询不展示

laravel框架中的ORM模型极大的简化了数据库操作,同时也提高了数据操作安全性。

在laravel框架ORM模型中默认会有三个时间字段,created_at,updated_at,deleted_at,这三个时间字段是框架默认操作,不用另加代码去处理,非赏方便:

如: UserModel::create($insert); ORM模型会自动添加上create_at字段但写入当前时间,而不用我们自己去添加这个字段,在修改时会加上updated_at,

在删除时laravel框架提供两种模式,一个是正常删除,一个是软删除,

正常删除会直接删除数据库里的记录,同样我们也不用为表创建deleted_at字段,

当使用软删除时,框架不会直接删除数据库里的数据,而是直接写deleted_at指定当前删除时间。

注意:当laravel使用了软删除,在每次正常查询时都会添加一个deleted_at is null 的条件,以去掉删除的记录,当前要取出删除的记录则要 :

UserModel::onlyTrashed()->get();

不排除展示删除的条目可以使用:

$users = User::withTrashed()->get();

或者

$users = DB::table('users')->get();

ORM在开发中方便了数据操作,只是在laravel框架中默认的ORM模型这三个时间字段的数据类型是datetime型,而且在软删除模式中deleted_at必须允许为NULL,更要命的是如果我们修改了字段类型为int型时deleted_at字段也必须允许为NULL,否则软删除会出现无法正常取数据,因为在使用软删除时框架默认添加的条件是deleted_at is NULL为正常数据,在一些数据量大的表中一般时间字段会使用int型,而如果允许为NULL则会影响索引的命中。 

你可能感兴趣的:(laravel,mysql)