资讯专栏INFORMATION COLUMN

深入理解 Laravel Eloquent(二)——中间操作流(Builder)

yy736044583 / 1406人阅读

摘要:原文发表在我的个人网站深入理解二中间操作流本篇教程是该系列教材的第二篇,将主要讲述中中间操作流的概念。复杂用法示例下一步深入理解三模型间关系关联

原文发表在我的个人网站:深入理解 Laravel Eloquent(二)——中间操作流(Builder)

本篇教程是该系列教材的第二篇,将主要讲述 Eloquent 中中间操作流的概念。中间操作流是我自己总结并翻译的概念,支撑该功能的类位于 IlluminateDatabaseEloquentBuilder,此概念对于新手入门有很大帮助,但是官方文档没有相关概念和解释。

什么是“中间操作流”(Builder)

Builder 这个单词可以直译成构造器,但是“中间操作流”更容易理解,因为数据库操作大部分时候都是链式操作的。

中间操作流,请看代码:

phpArticle::where("id", ">", 10)->where("id", "<", 20)->orderBy("updated_at", "desc")->get();

这段代码的 ::where()->where()->orderBy() 就是中间操作流。中间操作流用面向对象的方法来理解,可以总结成一句话:

  

创建一个对象,并不断修改它的属性,最后用一个操作来触发数据库操作。

但是,我们都知道,如果直接用 :: 来访问某个 function,无论这个 function 是否为 static,构造函数 __construct() 都不会被调用,那么创建对象是如何实现的呢?请看:https://github.com/illuminate/database/blob/master/Eloquent/Model.php#L3354

如何找到中间操作流的蛛丝马迹

中间操作流这个东西,文档里几乎没有任何有价值的信息,那么,我们该怎么找出这个玩意儿呢?很简单,使用以下代码:

php$builder = Article::where("title", "我是标题")->title;

然后你就会看到下面的错误:

为什么会出现错误?因为 Article::where() 了之后依然是 Builder 对象,还不是 Article 对象,不能直接取 title

“终结者”方法

所谓 “终结者” 方法,指的是在 N 个中间操作流方法对某个 Eloquent 对象进行加工以后,触发最终的数据库查询操作,得到返回值。

first() get() paginate() count() delete() 是用的比较多的一些 “终结者” 方法,他们会在中间操作流的最后出现,把 SQL 打给数据库,得到返回数据,经过加工返回一个 Article 对象或者一群 Article 对象的集合。

复杂用法示例
phpArticle::where("id", ">", "100")->where("id", "<", "200")->orWhere("top", 1)->belongsToCategory()->where("category_level", ">", "1")->paginate(10);
  下一步:深入理解 Laravel Eloquent(三)——模型间关系(关联)

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

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

相关文章

  • Laravel核心解读--Database(四) 模型关联

    摘要:为关联关系设置约束子模型的等于父模型的上面设置的字段的值子类实现这个抽象方法通过上面代码看到创建实例时主要是做了一些配置相关的操作,设置了子模型父模型两个模型的关联字段和关联的约束。不过当查询父模型时,可以预加载关联数据。 Database 模型关联 上篇文章我们主要讲了Eloquent Model关于基础的CRUD方法的实现,Eloquent Model中除了基础的CRUD外还有一个...

    gekylin 评论0 收藏0
  • 深入理解 Laravel Eloquent(三)——模型间关系(关联)

    摘要:是什么是一个,全称为,翻译为对象关系映射如果只把它当成数组库抽象层那就太小看它了。所谓对象,就是本文所说的模型对象关系映射,即为模型间关系。至此,深入理解系列文章到此结束。 原文发表在我的个人网站:深入理解 Laravel Eloquent(三)——模型间关系(关联) 在本篇文章中,我将跟大家一起学习 Eloquent 中最复杂也是最难理解的部分——模型间关系。官方英文文档中...

    2501207950 评论0 收藏0
  • 深入理解 Laravel Eloquent(一)——基本概念及用法

    摘要:原文发表在我的个人网站深入理解一基本概念及用法在本系列文章中,我将跟大家一起学习的基本用法,探索的各种高级功能,理解背后的运行原理,并最终达到深入理解灵活使用的目的。下一步深入理解二中间操作流 原文发表在我的个人网站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我将跟大家一起学习 Eloquent 的基本用法,探索 Eloquent 的各种...

    Edison 评论0 收藏0
  • Laravel 学习笔记之 Query Builder 源码解析(下)

    摘要:,看下源码返回很容易知道返回值是,然后将该值存储在变量中,这时。看下的源码去除掉字符后为返回从源码中可知道返回值为,这时。 说明:本文主要学习下Query Builder编译Fluent Api为SQL的细节和执行SQL的过程。实际上,上一篇聊到了IlluminateDatabaseQueryBuilder这个非常重要的类,这个类含有三个主要的武器:MySqlConnection, M...

    qpal 评论0 收藏0
  • 20 个 Laravel Eloquent 必备的实用技巧

    摘要:看起来是一个简单的机制,但是在底层,有很多半隐藏的函数和鲜为人知的方式来实现更多功能。在这篇文章中,我将演示几个小技巧。另外,在里也有些和时间相关的预定义方法通过关系排序一个复杂一点的技巧。幸运的是,确实有这样的方法。 showImg(https://segmentfault.com/img/bV8L5s?w=1240&h=634); Eloquent ORM 看起来是一个简单的机制,...

    clasnake 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<