总结要点:本地作用域的使用,数据排序

本地作用域

让我们可以定义通用的约束集合,以便复用

例如,对于一个公用,大家都可以看到的列表,需要对其中的数据进行排序,例如,按照回复时间进行排序。由于这个排序的约束,对每一个用户,请求都是一样的,可以使用一个通用的约束,而不需要每次都新建一个

定义本地作用域

  • 为模型想好一个约束方法的名字,例如 recent
  • 根据约定,创建一个本地作用域,只需要直接在约束方法名字前面加上 scope 前缀,即 scoptRecent, 同时,这个方法接受一个查询构建器 $query 作为参数,通过不断的链式调用,完善 $query 中的参数,达到约束的作用,最后将它返回,即返回一个查询构造器
    • 这里对参数的 $query 的解释,是我自己猜的,感觉好像说的过去,先这样理解
    • 如果有同学看到了,请辩证地看,有错误的地方请指出

使用本地作用域

  • 在对应的 Controller 调用,调用时,并不需要带上 scope 前缀,即调用 recent 即可

教程中的调用有所不同,因为教程通过一个 scopeWithOrder 来作为入口,并根据 URI 中的 order 参数再去调用真正的排序方法

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

按照这样理解的:
1:当我点击最后回复时,url地址是这样的:larabbs.test/topics?order=default,我的选项栏是在话题这样栏,所以是topics、
2:点击之后就进入到 TopicsControler中的index()方法。
3:执行withOrder()的方法,我们进入topicModel中看withOrder()方法
4:scopeWithOrder()中接收你传入进来的order值,然后根据order值不同,调用
scopreRecentReplied()和scopreRecent()方法,这两个方法呢,其实是加了对created_at和updated_at的一个排序。
5:最后得到一个$query是一个对象,在进行分页、

我没有搞懂的点是:scopeWithOrder($query,$order)是两个值,但是只传入一个一直,难道有一个值是默认自己调用的嘛?

其实scope可以写在控制器,然后控制器在switch判断,只是这样,其他模型就用不了,所以才写在topic模型的。多加一个判断,然后加上order()的条件语句、

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!