首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

orm 系列 之 Eloquent演化历程2

本文是orm系列的第三篇,也是Eloquent演化的第二篇,Eloquent系列会尝试着讲清楚Eloquent是如何一步一步演化到目前功能强大的版本的,但是毕竟个人能力有限,不可能分析的非常完善,总会有不懂的地方...,所以讲的错误的地方,恳请大牛们能不吝赐教;或者如果有什么地方是没看懂的,也请提出来,因为可能那地方就是自己没看懂,所以没讲明白,你提出后我们就可以一起讨论,让我们能共同的进步的。...Record模式中Model的功能,包括了Model、BuilderRelation功能,忘记的可以去看前一篇orm 系列 之 Eloquent演化历程1的内容 Query:包含了最基本的Sql的操作和语法逻辑...本文最后讲下Eloquent中新增的对象之间的关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 表结构 多态关联允许一个模型单个关联下属于多个不同模型...此处为什么会出现Manager,当项目变复杂后,我们很难简单的Eloquent的内部的组件进行有效的功能了,这个时候需要一个项目的门面,帮助我们外界沟通,让外界尽可能简单的使用Eloquent,于是就出现了

2.4K30

20 个 Laravel Eloquent 必备的实用技巧

Eloquent ORM 看起来是一个简单的机制,但是底层,有很多半隐藏的函数鲜为人知的方式来实现更多功能。在这篇文章中,将演示几个小技巧。 1....模型的 boot() 方法 一个 Eloquent 模型中,有个神奇的地方,叫 boot(),在那里,你可以覆盖默认的行为: class User extends Model { public...模型特性:时间、追加等 Eloquent模型有些参数,使用类的属性形式。...另外, Eloquent 里也有些时间相关的预定义方法: User::whereDate('created_at', date('Y-m-d')); User::whereDay('created_at...创建模型时创建额外的东西 我们都知道Artisan命令: php artisan make:model Company 但是,你知道有三个有用的标记可以模型生成相关文件

1.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

【Laravel系列4.4】模型Eloquent ORM使用(二)

模型Eloquent ORM使用(二) 对于模型的探索我们还将继续。上篇文章中,只是简单地通过模型操作了一下数据库,并且学习了一下关联操作的知识。...集合操作 其实这个集合操作并不是模型特有的,还记得 查询构造器 中,我们查询列表的时候,总会在最后加一个 toArray() ?...这个没有什么多说的,大家可以自己尝试一下。 模型调用的是查询构造器? 之前我们就一直强调,原生查询 操作封装成 查询构造器 ,然后 查询构造器 进一步面向对象化的封装变成了 ORM 类型的 模型 。...但 Eloquent\Builder 的内部持有的一个query 属性依然是 Query\Builder 对象,也就是说底层,它依然是调用的我们熟悉的那个 查询构造器 来进行工作的。...但是,这里划重点了,Eloquent\Builder 中有些方法是没有的,比如说 insert()、insertGetId() ,模型中,使用 save() 就可以代替这两个方法的操作。

2.8K20

orm 系列 之 Eloquent演化历程1

Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...本文是orm系列的第二篇,也是Eloquent演化的第一篇,Eloquent系列会尝试着讲清楚Eloquent是如何一步一步演化到目前功能强大的版本的,但是毕竟个人能力有限,不可能分析的非常完善,总会有不懂的地方...,所以讲的不错误的地方,恳请大牛们能指出,或者如果你有什么地方是没看懂的,也请指出问题来,因为可能那地方就是自己没看懂,所以没讲明白,也请提出来,然后我们一起讨论的,让我们能共同的进步的。...\Builder一个封装,支持面向对象式的sql操作,我们下面来看下当我们使用HasOne的时候发生了什么。...到这,我们就分析完了eloquentf6e2170版本上具有的功能了,到目前为止,eloquent的类图如下: 总结 目前,我们分析到的版本是f6e2170,已经具备了一个orm该需要的功能了,Connection

1K30

Laravel Eloquent ORM 实现查询表中指定的字段

使用Laravel ORM的Model方法find, get, first方法获取数据对象时返回的数据对象的attributes属性数组里会包含数据表中所有的字段对应的键值关系, 那么如何在ORM查询时只返回数据表中指定字段的数据呢...由于ORM依赖了QueryBuilder来实现查询, QueryBuilder的源码里通过查看get,first方法的实现可以到,他们都可以接收一个数组参数来指定要查询的字段: find方法的实现是...- model- getQualifiedKeyName(), '=', $id); return $this- first($columns); } 由于Eloquent Query Builder...是依赖查询构建器\Illuminate\Database\Query\Builder的,firstget方法的源码Query Builder里如下: /** * Execute the query...以上这篇Laravel Eloquent ORM 实现查询表中指定的字段就是小编分享给大家的全部内容了,希望能给大家一个参考。

3K21

Laravel Eloquent 模型类中使用作用域进行查询

如果有一些查询需要在多个地方调用,那么每个地方都要编写同样的代码,有没有什么办法对这种场景下的查询代码进行优化呢? Eloquent 模型类提供的「Scope」功能就可以帮我们实现这种优化。...从调用方式或者过滤器的作用范围来说,可以把「作用域」分为「全局作用域」「局部作用域」。「作用域」都是围绕模型类展开的,不管是全局作用域还是局部作用域,都是作用到某个模型类上。...接下来,我们就来演示如何在 Eloquent 模型类上使用「作用域」进行查询。...「局部作用域」的实现也比较简单,需要应用它的模型类中定义一个过滤器方法即可。...,比如我要在文章中查询指定类型的文章,可以通过 Post 模型类中定义如下方法: public function scopeOfType(Builder $query, $type) { return

2.5K20

Laravel源码分析之模型关联

使用模型关联给应用开发带来的收益认为有以下几点 主体数据关联数据之间的关系代码表现上更明显易懂让人一眼就能明白数据间的关系。...使用模型关联预加载后,效率上高于开发者自己写join子查询,模型关联底层是通过分别查询主体关联数据再将它们关联匹配到一起。...还是以官方文档的例子说起,一个 Country 模型可以通过中间的 User 模型获得多个 Post 模型。在这个例子中,您可以轻易地收集给定国家的所有博客文章。...动态属性加载关联模型 上面我们定义了三种使用频次比较高的模型关联,下面我们再来看一下使用它们时关联模型时如何加载出来的。...还有一些认为使用场景没那么多的多态关联、嵌套预加载那些并没有梳理,并且它们的底层实现都差不多,区别就是每个关联类型有自己的关联约束、匹配规则,有兴趣的读者自己去看一下吧。

9.5K10

【Laravel系列4.3】模型Eloquent ORM使用(一)

this->child->{模型Eloquent ORM使用(一) 先来说说 ORM 是什么,不知道有没有不清楚这个概念的小伙伴,反正这里就一道科普一下算了。...我们关系型数据库中,一行数据就可以看成是一个对象,整个表就可以看成是这个对象的列表。这就是非常简单地针对 ORM 的理解。 Java 中的 Hibernate 就是早期非常经典的 ORM 框架。...创建一个模型 创建模型我们可以手动,也可以通过命令行,既然是学习框架,那么我们还是通过命令行来创建一个模型类吧。使用的表依然是之前的表,不过还是改下名字吧,这回表名就叫做 m_test 。...对于 Laravel 中标准的 Eloquent 模型类来说,每个表都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据的创建时间修改时间...总结 今天,我们学习的内容是 ORM 的概念以及基础的模型使用,另外还加了一个关联功能的源码分析。

8.8K20

【译】20个 Laravel Eloquent 小技巧(上)

Eloquent ORM 在其表面简单易用的机制背后,还有很多半隐藏的功能或者少有人知的方法来实现一些很有用的需求。 本文中,将向您展示一些技巧。 1....模型的 boot() 方法 Eloquent模型中有一个名为boot()的神奇地方,您可以在其中覆盖默认行为: class User extends Model { public static...但你是否知道定义关系模型的时候就已经可以增加 where 或者 orderBy 的条件了?...使用关系模型字段排序 一个更复杂的“技巧”。 如果你有帖子,但要通过最新帖子对它们进行排序? 顶部有最新更新主题的论坛中非常常见的要求,对吧?...') { $query->orderBy('created_at', request('ordering_rule', 'desc')); } 但是一个更好的方法是——使用 when()方法 $

2.2K50

Laravel源码解析之Eloquent Model

Eloquent Model以上文讲到的Query Builder为基础提供了Eloquent Builder与数据库进行交互,此外还提供了模型关联优雅地解决了多个数据表之间的关联关系。...Builder的实现细节我们在上一篇文章里已经说过了这里不再赘述,如果好奇Query Builder是怎么执行SQL操作的可以回去翻看上一篇文章。...是Query Builder的基础上做了进一步封装, Eloquent Builder会把这些CRUD方法的调用转给Query Builder里对应的方法来完成操作,所以Query Builder里能使用的方法到...Eloquent Model中同样都能使用。...除了对数据表、基本的CRUD的抽象外,模型另外的一个重要的特点是模型关联,它帮助我们优雅的解决了数据表间的关联关系。我们之后的文章再来详细看模型关联部分的实现。

2.2K50

3分钟短文:Laravel 从软删除说到模型作用域的概念

引言 上一节我们讲了通过模型方法新建条目,或者更新数据。对于写操作还有更为重要的一个方法, 就是数据的删除。删除数据,有物理删除软删除的区别。 ?...我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...所以引入了软删除的概念,就是表内添加一个字段,用于标记,这一行条目是否算是删除状态。laravel中, 这个软删除字段默认是 deleted_at。你也可以模型中手动指定。...然后模型中,引入软删除的功能,将其进行全局生效的使用。...既然说到了模型作用域,我们不妨延伸一下,说说这个设计点,以及适用的场景。 比如说有一个查询条件代码内到处都要用,有没有简写方法,写一次其他地方可以随意调用呢?这就是本地作用域的方法了。

1.3K30

跟我一起学Laravel-EloquentORM高级部分

查询作用域 全局作用域 全局作用域允许你对给定模型的所有查询添加约束。使用全局作用域功能可以模型的所有操作增加约束。...the scope to a given Eloquent query builder...,deleting, deleted, restoring, restored 使用场景 假设我们希望保存用户的时候对用户进行校验,校验通过后才允许保存到数据库,可以服务提供者中为模型的事件绑定监听...Mutators Eloquent模型中,AccessorMutator可以用来对模型的属性进行处理,比如我们希望存储到表中的密码字段要经过加密才行,我们可以使用Laravel的加密工具自动的对它进行加密...$casts属性提供了一种非常简便的方式转换属性为常见的数据类型,模型中,使用$casts属性定义一个数组,该数组的key为要转换的属性名称,value为转换的数据类型,当前支持integer, real

1.2K40

laravel框架模型和数据库基础操作实例详解

分享给大家供大家参考,具体如下: laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\...,[5]); 2.查询构造器[Query Builder] laravel查询构造器提供了方便流畅的接口,用来建立及执行数据库查找语法。...Eloquent ORM一个ActiveRecord实现,用于数据库操作。...每个数据表都有一个与之对应的模型,用于数据表交互。 建立模型app目录下建立一个Student模型,即Student.php,不需要带任何后缀。 <?...修改数据 使用save方法更新模型 使用update方法更新数据(create相对应的,Eloquent模型类还支持使用update方法更新数据,同样要用到批量赋值) //通过模型更新数据 $student

2.8K20

【译】20个 Laravel Eloquent 小技巧(下)

自定义属性排序 假设你有下面的一段代码: (设定了一个返回对象时候的附加属性 ‘full_name’参见 tips5 模型属性: 时间戳, 附加属性(appends) 等) function getFullNameAttribute...就是对 DB 查询对象的一个封装,所以可以用在 DB 上的原始查询方法,都可以用在继承自 Eloquent 的 model 对象上。)...保存的时候重写 update_at 字段 你知道 - > save()方法是可以接受参数的? 因此,我们可以告诉它“忽略” updated_at默认填充当前时间戳的功能。...Laravel 默认会给所有实体类配置时间戳,如果不需要一般是模型中指定 $timestamps = false 18. update()方法的返回值是什么?...->where('age', '>=', 65); }) 20 orWhere方法使用更多参数 最后一条,你可以个 orWhere 方法传递一个数组。

2.8K10
领券