Laravel 有三宝,路由、容器和 Eloquent ORM,Eloquent ORM。
我我的一直比较推荐于在实际操做中学习,以前简单了解了路由和Eloquent ORM的基本用法,今天咱们继续来学习它的其余用途,在深刻了解Laravel 的 Eloquent ORM以前,咱们先用他作一个简单的分页功能,完成上一章CURD中少了的分页。php
1、基于Eloquent ORM的分页操做:ajax
后台分页常见基本分两种,一种是跳转分页,一种是ajax分页。
咱们上一章学习了,增删改查,已经有现成的数据表和控制器等,为了测试方便,咱们再往数据表里面添加几条数据。数据库
添加后,咱们只要修改NewsController控制器里的index方法便可来练习分页操做。浏览器
此时咱们先注释掉第19行的代码,打印18行,打开浏览器 127.0.0.1/comment 查看:学习
此时咱们打印出来的数据除了表中的前五条数据之外,咱们还传递过来了当前页码current_page,最后页码last_page,以及下一条页码url next_page_url,能够看出咱们能够经过这种方式传递参数给API,进行跳转分页。
页连接为http://127.0.0.1:9999/comment/?page=页码数;便可实现分页。测试
下面咱们来看ajax分页,Eqoluent ORM是一个很完美地数据库应用层组件,依然提供了分页所须要的各类参数,以知足参数传值的分页。
打开19行注释,注释掉18行,从新打印,能够发现打印出来的数据不变,此时咱们改变控制器中
var_dump(News::paginate(5,['*'],'page',1)->toArray()); 改成
var_dump(News::paginate(5,['*'],'page',2)->toArray());
此时咱们会发现,请求到的数据已经改变了,相应的其余参数也变成了第二页的,因此若是须要ajax分页时,只须要传入相应页码参数,便可获取到该页面数据,能够结合搜索等条件限制。url
2、软删除spa
1)实现软链接
咱们在上一章学习了删除模型,经过在模型实例上调用 delete 方法:rest
News::find($id)->delete();
在上面的例子中,咱们在调用 delete 方法以前会先从数据库中取回模型。不过,若是你已知道了模型中的主键,则能够不用取回模型就能直接删除它。若要直接删除,请调用 destroy 方法:code
News::destroy(1); News::destroy([1, 2, 3]);
除此以外呢,咱们还能够经过查询来删除,前面为查询条件,后面跟着的是delete();
除了从数据库中移除实际记录,Eloquent 也能够「软删除」模型。当模型被软删除时,它们并不会真的从数据库中被移除。而是会在模型上设置一个 deleted_at 属性并将其添加到数据库。若是模型有一个非空值 deleted_at,表明模型已经被软删除了。要在模型上启动软删除,则必须在模型上使用 IlluminateDatabaseEloquentSoftDeletes trait 并添加 deleted_at 字段到你的 $dates 属性上:
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class News extends Model { use SoftDeletes; /** * 须要被转换成日期的属性。 * * @var array */ protected $dates = ['deleted_at']; }
完成模型添加后,咱们须要打开数据库表,给表News里面添加一字段 deleted_at 类型 为 timestamp类型,此时当咱们删除数据的时候,会自动给表里该项数据这一个字段添加该段时间,等查询的时候,会过滤掉这一项不为空的数据。从而达到了软删除。
要确认指定的模型实例是否已经被软删除,可使用 trashed 方法:
if ($news->trashed()) {
//
}
查询被软删除的模型#
包含被软删除的模型#
如上所述,被软删除的模型将会自动从全部的查询结果中排除。不过,你能够经过在查询中调用 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();
永久地删除模型#
有时候你可能须要真正地从数据库移除模型。要永久地从数据库移除一个已被软删除的模型,则可以使用 forceDelete 方法:
// 强制删除单个模型实例...
$news->forceDelete();
// 强制删除全部相关模型...$news->history()->forceDelete();