当前位置: 首页 > 后端技术 > PHP

laravel5.5手写教程4EloquentORM分页和软删除

时间:2023-03-29 22:36:29 PHP

Laravel有三宝,路由,容器和EloquentORM,EloquentORM。就个人而言,我总是建议在实践中学习。简单了解一下路由和EloquentORM的基本用法。今天我们就继续学习它的其他用途。在深入了解Laravel的EloquentORM之前,我们先用它来做一个简单的CURD的分页功能,完成上一章缺失的分页。1、基于EloquentORM的分页操作:后台分页基本有两种,一种是跳转分页,一种是ajax分页。上一章我们学过,增删改查。已经有现成的数据表和控制器。为了测试方便,我们在数据表中多添加几条数据。添加后,我们只需要修改NewsController控制器中的index方法即可练习分页操作。此时,我们先将第19行的代码注释掉,打印第18行,打开浏览器127.0.0.1/comment查看:此时除了表中的前5条数据外,我们还传递了当前页码current_page,上一页last_page,下一页urlnext_page_url,可见我们可以通过这种方式给API传递参数,实现跳转分页。页面链接为http://127.0.0.1:9999/comment/?page=页码;可以实现分页。接下来我们来看ajax分页。EqoluentORM是一个完美的数据库应用层组件。它还提供了分页需要的各种参数,以满足参数传值的分页。打开19行注释,注释掉18行,重新打印。可以发现打印出来的数据没有变化。这时候我们在controller中更改var_dump(News::paginate(5,['*'],'page',1)->toArray());更改为var_dump(News::paginate(5,['*'],'page',2)->toArray());此时我们会发现请求的数据发生了变化,对应的其他参数也变成了第二页,所以如果需要ajax分页,只需要传入对应的页码参数就可以获取到页面数据,即可结合搜索和其他条件。2.软删除1)实现软连接上一章我们学习了删除模型,通过调用模型实例的delete方法:News::find($id)->delete();在上面的示例中,我们在调用删除方法之前从数据库中检索模型。但是,如果您已经知道模型中的主键,则可以在不检索模型的情况下将其删除。直接删除请调用destroy方法:News::destroy(1);News::destroy([1,2,3]);另外,我们还可以通过查询删除,前面是查询条件,后面是delete();除了从数据库中删除实际记录外,Eloquent还可以“软删除”模型。当模型被软删除时,它们实际上并没有从数据库中删除。相反,在模型上设置deleted_at属性并将其添加到数据库中。如果模型具有非空deleted_at值,则表示模型已被软删除。要在模型上启用软删除,您必须在模型上使用IlluminateDatabaseEloquentSoftDeletes特性并将deleted_at字段添加到$dates属性:trashed()){//}查询被软删除的模型#Include被软删除的模型#如前所述以上,是软删除的模型会自动从所有查询结果中排除。但是,您可以通过在查询中调用withTrashed方法来强制查询软删除模型:$news=AppNews::withTrashed()->where('id',1)->get();withTrashed方法也适用于关系查询:$news->history()->withTrashed()->get();仅获取软删除数据#onlyTrashed将仅获取软删除数据:$news=AppNews::onlyTrashed()->where('id',1)->get();恢复软删除的模型#有时您可能想“取消删除”已被软删除的模型。要将软删除的模型恢复到有效状态,您可以在模型实例上使用restore方法:$news->restore();您还可以在查询中使用restore方法来快速恢复多个模型:AppNews::withTrashed()->where('id',1)->restore();与withTrashed方法类似,restore方法也可以用在关系查询中:$news->history()->restore();永久删除模型#Occasionally你可能需要实际从数据库中删除模型。要从数据库中永久删除软删除模型,请使用forceDelete方法://Forcedeleteasinglemodelinstance...$news->forceDelete();//强制删除所有相关模型...$news->history()->forceDelete();