资讯专栏INFORMATION COLUMN

laravel5.5手写教程4Eloquent ORM分页及软删除

mindwind / 2622人阅读

摘要:从而达到了软删除。不过,你可以通过在查询中调用方法来强制查询已被软删除的模型方法也可以被用在关联查询只取出软删除数据会只取出软删除数据恢复被软删除的模型有时候你可能希望取消删除一个已被软删除的模型。

Laravel 有三宝,路由、容器和 Eloquent ORM,Eloquent ORM。
我个人一直比较推荐于在实际操作中学习,之前简单了解了路由和Eloquent ORM的基本用法,今天我们继续来学习它的其他用途,在深入了解Laravel 的 Eloquent ORM之前,我们先用他做一个简单的分页功能,完成上一章CURD中少了的分页。

一、基于Eloquent ORM的分页操作:

后台分页常见基本分两种,一种是跳转分页,一种是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分页时,只需要传入相应页码参数,即可获取到该页面数据,可以结合搜索等条件限制。

二、软删除

1)实现软连接
我们在上一章学习了删除模型,通过在模型实例上调用 delete 方法:

News::find($id)->delete();

在上面的例子中,我们在调用 delete 方法之前会先从数据库中取回模型。不过,如果你已知道了模型中的主键,则可以不用取回模型就能直接删除它。若要直接删除,请调用 destroy 方法:

News::destroy(1);
News::destroy([1, 2, 3]);

除此之外呢,我们还可以通过查询来删除,前面为查询条件,后面跟着的是delete();
除了从数据库中移除实际记录,Eloquent 也可以「软删除」模型。当模型被软删除时,它们并不会真的从数据库中被移除。而是会在模型上设置一个 deleted_at 属性并将其添加到数据库。如果模型有一个非空值 deleted_at,代表模型已经被软删除了。要在模型上启动软删除,则必须在模型上使用 IlluminateDatabaseEloquentSoftDeletes trait 并添加 deleted_at 字段到你的 $dates 属性上:


完成模型添加后,我们需要打开数据库表,给表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();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31976.html

相关文章

  • windows下laravel5.5手写教程2路由Eloquent ORM操作(适合初学者)

    摘要:一路由目录众所周知,对于我们熟知的任何一款框架,例如路由系统都是极其重要的存在。文件用于定义界面的路由。定义在中的路由都是无状态的,并且被分配了中间件组。生成的控制器为每个行为保留了方法,同时还包括了处理动作和的声明注释。 一、路由目录 众所周知,对于我们熟知的任何一款PHP框架,例如TP、CI、YII、路由系统都是极其重要的存在。 对于laravel框架也一样,对于数据库的操作,无非...

    BlackFlagBin 评论0 收藏0
  • laravel5.5手写教程3的基于资源路由的CURD操作(适合初学者)

    摘要:新增一篇新闻新增失败输入不符合要求请输入标题请输入内容新增文章上面代码中的是为了防攻击的,每个表单都必须存在。 本文我将结合简单例子,完成laravel框架下的增删改查,希望会对大家有所帮助。在进行之前,大家应该保证自己的数据库链接无误,artisan命令能正常使用,路由链接无问题。 一、创建控制器、路由避免影响其他路由,我们先注释掉之前联系时编写的所有路由。因为上一章我们已经学会建立...

    olle 评论0 收藏0
  • windows下laravel5.5手写教程1(适合初学者)

    摘要:打开浏览器输入,如无意外,将出现如下图,表示框架安装成功。四系统内部后台管理系统这个是框架自带的后台登录管理系统,只需要简单的命令即可运行。出现上图即为,创建模型成功。 在PHP个各种web开发框架中,laravel算是一款简洁、优雅的开发框架,本人也刚刚接触到laravel,通过学习大神们的一些文章,下面是我的一些心得体会,希望可以给初学者一些帮助,大家一起进步。言归正传: 本人环境...

    GeekGhc 评论0 收藏0
  • 一起来学SpringBoot | 第六篇:整合SpringDataJpa

    摘要:忽略该字段的映射省略创建数据访问层接口,需要继承,第一个泛型参数是实体对象的名称,第二个是主键类型。 SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程 上一篇介绍了Spring JdbcTempl...

    Dionysus_go 评论0 收藏0

发表评论

0条评论

mindwind

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<