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

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

模型Eloquent ORM的使用(二) 对于模型的探索我们还将继续。上篇文章中,只是简单地通过模型操作了一下数据库,并且学习了一下关联操作的知识。...这个 toArray() 并不是 Builder 中的方法,如果不加这个 toArray() ,返回的是什么大家有没有注意过?...这是一个连续递进的关系,之前在 查询构造器 的文章中,我们已经看到了它的底层就是调用的 原生查询 操作。那么这回,我们再来看一下 Model 中的方法,在底层是不是调用的是 查询构造器 。...而不是我们之前 查询构造器 中的 laravel/framework/src/Illuminate/Database/Query/Builder.php 对象。...但是,这里划重点了,Eloquent\Builder 中有些方法是没有的,比如说 insert()、insertGetId() ,在模型中,使用 save() 就可以代替这两个方法的操作。

2.8K20

orm 系列 之 Eloquent演化历程2

,所以讲的错误的地方,恳请大牛们能不吝赐教;或者如果有什么地方是没看懂的,也请提出来,因为可能那地方就是我自己没看懂,所以没讲明白,你提出后我们就可以一起讨论,让我们能共同的进步的。...,也是laravel中一大亮点Artisan,Artisan是 Laravel 自带的命令行接口名称,此处不做具体的介绍了,有机会再细说的,当我们在命令行中执行php artisan command的时候...:是前一篇讲的对于Active Record模式中Model的功能,包括了Model、Builder和Relation功能,忘记的可以去看前一篇orm 系列 之 Eloquent演化历程1的内容 Query...本文最后讲下Eloquent中新增的对象之间的关系:多态关系,以下内容摘自[ Laravel 5.3 文档 ] Eloquent ORM —— 关联关系 表结构 多态关联允许一个模型在单个关联下属于多个不同模型...文件,其最初是在f851607中加入的,我们来看下Manager中的内容。

2.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Laravel源码解析之Model

    根据单一责任开发原则来讲,在laravel的开发过程中每个表都应建立一个model对外服务和调用。...protected $table = 'users'; } 解析 Laravel的数据操作分两种 – DB facade – Eloquent ORM 它们除了有各自的特色外,基本的数据操作都是通过...Database\Query 类,开头我们讲过这个类了,这里就不多说了,随后就是各种sql的拼接->执行sql->结束战斗 Eloquent ORM Eloquent ORM 与DB facade 类似...new Builder($query); } 最后我们到了 Illuminate\Database\Eloquent\Builder 文件下,这个类中涵盖了ORM的基本操作,例如find , findOrFail...如果你在代码用到了get方法,抱歉,这里没有,它依旧会通过__call 方法将你的请求转发到 Illuminate\Database\Query\Builder 类中 $this->query->{$method

    1.1K30

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

    this->child->{模型Eloquent ORM的使用(一) 先来说说 ORM 是什么,不知道有没有不清楚这个概念的小伙伴,反正这里就一道科普一下算了。...其实,Laravel 中的 Eloquent ORM 也是 Active Record 的实现,这也是现在 ORM 的主流。...如果你的表中有这两个字段的话,那么在 Model 操作的过程中,你可以忽略这两个字段的操作,Model 系统会自动设置它们。...在标准的数据库结构中,我们是有主外键的概念的,但是,说实话,在 MySQL 中使用主外键的情况还真的是非常少。之前似乎有印象说 MySQL 不是很推荐通过主外键来建立表之间的联系。...这个我们以后再详细学习 MySQL 相关的文章时再深入的学习。至于这件事是不是真的,我也只是仅有一个印象了,如果说得不对,也请大家不要见怪,后面学习到的时候我们再来纠正。

    8.9K20

    Laravel5.2之Demo1——URL生成和存储

    这里的url表示提交表单时的路由,方法为post。在这里使用laravelcollective/html这个组件,顺便了解下怎么在laravel中安装组件。 这里书中使用了laravel4....Mapping)为Eloquent ORM,其实就是Model层,来管理数据库中的数据表且一一对应关系。...不过有时也推荐使用它的Query Builder查询构造器,实际上就是SQL语句封装的类,性能会比较高一些,个人遇到过一个场景:使用Eloquent ORM性能有点慢,导致PHP执行过长报503 Time...Out,改成Query Builder后性能高很多脚本执行很快搞定,当然各有利弊,毕竟Eloquent很强大很好用。...laravel框架使用也仅此而已,没有那么复杂,对于我们这样的刚刚入门,了解这个流程就可以玩一玩了!!!

    24.1K31

    Laravel 学习笔记5.3之 Query Builder 源码解析(下)

    MySqlConnection主要就是在执行SQL时做连接MySql数据库操作,MySqlProcessor主要就是用来对执行SQL后的数据集做后置处理操作,这两点已经在之前上篇聊过,那MySqlGrammar...所以这里可看出Query Builder是在PHP PDO的基础上实现的一层封装,使得用更加面向对象的Fluent API来操作数据库,而不需要写一行SQL语句。...那Eloquent ORM又是什么,与Query Builder是什么关系呢?既然有了Query Builder,为何还提供了Eloquent ORM呢?...实际上,Eloquent ORM又是对Query Builder的封装,这样可以实现更多好用且Query Builder所没有的功能,如Model Relationships;Accessor/Mutator...以后再聊Eloquent ORM的实现原理吧。 总结:本文主要学习了Query Builder编译SQL细节和执行SQL逻辑。后续在分享下Eloquent ORM的实现原理,到时见。

    1.3K51

    3分钟短文:Laravel 模型查询数据库的几个关键方法

    引言 本期继续我们的laravel学习,主要说一说laravel使用eloquent orm 模型 读取数据库条目的几个常用方法。 ?...因为设计的原因,laravel支持的链式操作 本质上方法的返回值归属于不同的类。所以在使用方法之前务必明确调用的是哪个类的那个方法,返回的是什么类型的数据。...eloquent门面为我们提供了很多好用的链式操作方法, 在query builder筛选出合适的条目后,返回一个eloquent collection,或者是一个 基类的collection对象,可以直接使用集合的方法操作数据集...如果返回的是多个条目,就不能用这些方法了: $vipContacts = Contact::where('vip', true)->get(); 有一个标准的方法 get,就是返回一个 eloquent...如果你的数据库条目固定, 且是少量数据,那么直接用 $contacts = Contact::all(); 把记录全部拿出来就好了。

    2.1K40

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

    我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...如果你使用系统的migrate方法创建迁移文件,那么只用在构造方法中添加如下代码: Schema::table('contacts', function (Blueprint $table) {...然后在模型中,引入软删除的功能,将其进行全局生效的使用。...$builder->where('active', true); }); }} 那么所有的模型查询,都会默认加上声明中的where约束。

    1.4K30

    【Laravel系列4.5】主从库配置和语法生成

    它的作用是,在同一次的请求中,如果执行了增删改的操作,那么紧接着的查询也会走 write 也就是主库的查询。...然后顺着我贴出的代码,可以一路看到就是如果有read 配置,那么就会先使用 write 配置创建一个主连接,接着调用这个主连接的 setReadPdo() 方法并根据 read 配置又创建了一个从数据库连接...但是 查询构造器 以及上层的 Eloquent ORM 都是之前讲过的面向对象式的链式生成对象之后完成数据库查询的,这其中,肯定有 SQL 语句的生成过程,这就是我们接下来要学习的内容。...这里我就不贴代码了,剩下的东西就看大家自己怎么发掘咯! 总结 今天的内容其实相对来说轻松一些,毕竟关于 Laravel 数据库方面的内容重点在于之前学习过的 模型 和 查询构造器 上。...当然,更复杂的东西其实还是在构造器中,毕竟在语法生成这里其实是已经到了最后的拼装阶段了。有兴趣的同学可以多深入研究一下 Builder 对象中关于上述功能的方法实现。

    4.3K20

    orm 系列 之 Eloquent使用1

    Eloquent ORM 本文会是一个Eloquent的使用教程,在此之前,我们先讲述下怎么搭建环境,完整的系列请查看orm 基础环境的搭建 记录下怎么用docker搭建laravel的环境 新建项目composer...通过Eloquent的Scheme Builder构建数据库 通过使用Schema Builder我们可以在设计数据库的时候,不写一行sql,通过Schema Builder,我们可以 creating...我们在多人开发的过程中,每个人开发阶段不同、DB状态也不同,整合时无法知道差异,但是如果直接修改DB的话,没有记录也没办法恢复,这时候,我们就需要引入Migration了。...总结 本文主要是介绍了使用docker来构建laravel的开发环境,同时,我们也介绍了怎么说会用phpstorm来开发laravel,搭建好环境后,主要介绍了Eloquent的Schema Builder...和migrations功能,通过使用Schema Builder,使得我们可以不用写一句sql就可以完成数据库设计,而migrations则使得我们在团队协作中,更好的对数据库进行版本的控制。

    1.7K20

    3分钟短文:Laravel模型作用域,为你“节省”更多代码

    全局作用域 假设有些数据库查询操作,无论是在控制器内,或者在模板文件内,或者命令行方法内,都有重复的使用需求,要是在模型内有一个公用的方法,默认就加上这些筛选条件,就可以显著减少代码量了。...events WHERE `published` = 1; 如果条件 published = 1 在默认的情况下需要开启,我们可以使用laravel模型的 全局作用域 方式为所有查询追加上这个条件。...在模型文件 Event 内头部引入下述类: use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder...那有些读者可能要问了:“如果我不想要这个约束语句,岂不是连模型也永不了了?” 那哪儿能呢!不过就是QueryBuilder的一个属性数组的一个元素而已,手动移除就行了,这样特例问题就解决了。...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published

    1.4K22

    基于独立的 Laravel Eloquent 组件编写 ORM 模型类

    ORM 两种最常见的实现方式是 Active Record 和 Data Mapper,Active Record 尤其流行,在很多框架中都能看到它的身影,比如 Laravel 框架使用的 Eloquent...ORM 使用的就是 Active Record 模式,而 Symfony 框架使用的 Doctrine ORM 使用的则是 Data Mapper 模式。...下载 Eloquent ORM 相关扩展包 Eloquent ORM 作为 Laravel 框架自带的 ORM 实现,还可以在 Laravel 框架之外作为独立的 ORM 组件使用。...模型类全局可用(为了编写 Eloquent 模型类,如果只是使用 Laravel 提供的数据库查询构建器功能,则不需要这些操作)。...app/model 目录下的 Post.php 和 Album.php 中,它们继承了 Eloquent ORM 的模型类基类 Model,这样就可以使用 Eloquent 模型类支持的属性和方法。

    2K10

    orm 系列 之 Eloquent演化历程1

    Eloquent Eloquent是laravel中的orm,采取的是active record的设计模式,里面的对象不仅包括领域逻辑,还包括了数据库操作,但是大家平时使用的时候可能没有探究eloquent...,所以讲的不错误的地方,恳请大牛们能指出,或者如果你有什么地方是没看懂的,也请指出问题来,因为可能那地方就是我自己没看懂,所以没讲明白,也请提出来,然后我们一起讨论的,让我们能共同的进步的。..., $foreign_key); 当使用User::with('phone')->get()的时候,就会去eager load进phone了,具体的过程中,在调用Eloquent\Builder的get...以上就是我们分析的HasOne的实现,其他的关系都类似,此处不再重复,然后eager load的含义是指,当我们要加载多个数据的时候,我们尽可能用一条sql解决,而不是多条sql,具体来说如果我们有多个...到这,我们就分析完了eloquent在f6e2170版本上具有的功能了,到目前为止,eloquent的类图如下: 总结 目前,我们分析到的版本是f6e2170,已经具备了一个orm该需要的功能了,Connection

    1.1K30

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

    下面是翻译自 Laravel-News 的一篇教程,总结了 Laravel 的对象关系映射框架(ORM)的几个小技巧。...Eloquent ORM 在其表面简单易用的机制背后,还有很多半隐藏的功能或者少有人知的方法来实现一些很有用的需求。 在本文中,我将向您展示一些技巧。 1....模型的 boot() 方法 在Eloquent模型中有一个名为boot()的神奇地方,您可以在其中覆盖默认行为: class User extends Model { public static...,通过模型中定义 getXXXAttribute 的方式来定义 } 可不仅仅有这些,还有: protected $primaryKey = 'uuid'; // 模型的主键名称可以不是默认的 id public...使用关系模型字段排序 一个更复杂的“技巧”。 如果你有帖子,但要通过最新帖子对它们进行排序? 顶部有最新更新主题的论坛中非常常见的要求,对吧?

    2.2K50

    3分钟短文:Laravel 使用DB门面操作原生SQL

    引言 我们推荐使用laravel的eloquent orm 模型操作数据库表, 因为特性更为丰富,组装更为灵活,在编程层面操作数据的来来去去非常直观。...学习时间 系统提供了DB门面用于原生的SQL操作,在程序内引入下面的类: use Illuminate\Support\Facades\DB; 该类的定义很简单,标准的门面注册方法: class DB...DB门面既可以使用query builder的链式操作,也可以用于执行原生查询。举几个例子。...先说查询语句, 如果在数据库优化上做的比较好的一些SQL固定写法,可以使用原生方法固化下来。...一般我们不推荐使用原生SQL语句操作数据库,提倡大家把数据库操作集中到模型层, 充分利用eloquent orm的性能。

    2.3K20
    领券