从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询为例...注:实际开发中为了提高查询性能,我们往往是在 posts 表中冗余提供一个 comments_count 字段,每新增一条评论,该字段值加 1,查询的时候直接取该字段即可,从而提高查询的性能。...比如,如果我们要在某篇文章上新增一条评论可以这么做: $post = Post::findOrFail(1); $faker = \Faker\Factory::create(); $comment =...这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回的也是一个正常的 User 模型实例。
使用了pdo参数绑定,使应用程序免于sql注入,因此传入的参数不需要额外转义特殊字符。基本上可以满足所有的数据库操作,而且在所有支持的数据库系统上都可以执行。...',' ',4)- delete();//删除多条 echo $num; //删除的行数 $num=DB::table("vipinfo")- truncate();//删除整表,不能恢复,谨慎使用 (...xiaoming'; $student- vip_type='出行'; $student- vip_fenshu=900; $bool=$student- save(); //保存 echo $bool; 从数据库里取得某条记录的时间戳时...,默认取得的是按日期格式化好的时间戳,如果想取得原本的时间戳,则在模型里增加asDateTime方法。...::destroy(10); //删除主键为10的一条记录 echo $num; //返回删除的行数 $num=Student::destroy(10,5); //删除多条 或者$num=Student
select() 方法可以查询指定自定义字段 $data = DB::table('users')- select('id','name', 'email')- get(); //value() 方法从结果中获取单个值...'name' = '测试']); //delete() 方法删除记录 $data=DB::table('users')- where('id', ' ', 10)- delete(); //paginate...() 方法分页 每页显示数量 //注意:目前使用 groupBy 的分页操作不能被Laravel有效执行 $data = DB::table('users')- paginate(2); //前台分页中链接附加参数实现分页...{{ $data- appends(['name' = $namePage])- links() }} //simplePaginate() 方法分页视图中简单的显示“下一页”和“上一页”链接 $data...mysql从5.7以后,默认开启group by的严格模式。 解决方法:找到config/database.php 在mysql下面把’strict’ = true,改为false。
今天开始讲如何在 Laravel 中操作数据库,Laravel 为我们提供了多种工具实现对数据库的增删改查,在我们使用 Laravel 提供的这些数据库工具之前,首先要连接到数据库。...随着应用访问量的增长,对数据库进行读写分离可以有效的提升应用整体性能,关于数据库层面的读写分离配置不属于本教程讨论范畴,我们这里只讨论从应用层面如何在 Laravel 项目中配置读写分离连接。...针对读写分离数据库的连接,Laravel 数据库底层会自动判断,如果是查询语句会使用读连接,如果是数据库插入、更新、删除等操作会使用写连接。...然后我们通过 Tinker 插入一条记录(插入属于写操作,自动使用写连接): 然后你会在写数据库中看到这条记录,读数据库中没有,接下来,我们运行一条查询语句(查询属于读操作,自动使用读连接): 此时,由于我们并没有配置读写数据库之间的数据同步...如果该配置项设置为 true 的话,在同一个请求生命周期中,写入的数据会被立刻读取到,底层原理其实就是读操作也从写数据库读取,因为写数据库始终是最新数据,从而避免主从同步延迟导致的数据不一致。
所有的记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接(双向指针)。所以查询时,无论正序倒序,其实是一样的扫描速度。...注意看根页的Min记录,就是这样的。而33号page的Min记录由于没有下一层了,所以没有pageNo指针。 可以看到,上一层的Key,在下一层对应的page中,也会重复存在,譬如Key=10的记录。...从名字就能看出来,用户记录就是行数据,可重用就是曾经被分配过数据后来被删了,未使用就是没分配过的空间。...页面重组 一个页面会频繁的插入删除,在插入过程中,都会去已经删除的可重用链表去找合适的空间,如果放得下,就会放进去,放不下,另寻空间。...如果是一张表的话,如果大量数据被删,就需要及时处理回收空间,可以通过一个空的alter命令,如alter table tablename engine innodb,就可以将表的空间给回收重组了。
(对于每个INSERT, InnoDB存储引擎会完成一个DELETE) 你删除了一条记录,至少要把这条记录中的内容都记下来,这样之后回滚时再把由这些内容组成的记录插入到表中就好了。...4.回滚段存在于Undo表空间中,在数据库中可以存在多个Undo表空间,但同一时刻只能使用一个Undo表空间。...如果照这样下去除非MySQL清理的非常勤快,否则随着时间的推移,磁盘空间会增长的非常快,而且很多空间都是浪费的。 于是Undo页就被设计的可以重用了,当事务提交时,并不会立刻删除Undo页。...Undo Log在commit后,会被放到一个链表中,然后判断Undo页的使用空间是否小于3/4,如果小于3/4的话,则表示当前的Undo页可以被重用,那么它就不会被回收,其他事务的Undo Log可以记录在当前...:Undo日志存储的目录位置 innodb_undo_logs: 回滚的个数 默认128 参考文章 《MySQL是怎样运行的--从根儿上理解MySQL》—小孩子4919(https://juejin.cn
通过前面几篇教程的预热,我们已经连接上数据库,创建好了数据表,填充好了数据,接下来,就是在 Laravel 应用中实现对数据库的增删改查了。...中,我们不推荐这么做,因为这些对数据表结构的操作可以通过数据库迁移功能来实现,而且那样做的话可维护性更好。...原生插入语句 想要在数据库中插入一条记录,通过 DB 门面提供的 insert 语句即可: $name = str_random(10); $email = str_random(10) . '@163...查询记录 要查询指定数据表中的所有记录,可以通过以下方式实现: $users = DB::table('users')->get(); 该方法返回的是一个包含所有查询结果的 stdClass 集合:...上述代码返回的也是包含指定查询结果的 stdClass 集合: 有时候我们可能希望返回查询结果中的第一条记录,这可以通过将 get 方法替换为 first 方法来实现: $user = DB::table
我们在 第4部分 完成了编辑用户的功能,并且学习了如何使用 v-model 来监听视图组件中用户信息的更改。现在我们可以开始构思删除用户功能,以及删除操作成功后如何处理 UI 变化。...接下来,我们要在Delete按钮上绑定 onDelete() 回调,从而实现删除用户的功能。...如何对成功删除用户作出相应的反馈 与更新一个用户不同的一点是,一旦我们成功删除了一个用户记录,那么数据库中就没有这个用户的记录了。在传统的网页应用中,我们会删除那条用户记录,然后重定向返回用户列表。...使用服务端的 Laravel 应用,我们可以很容易地从 ModelNotFoundException 渲染一个 404.blade.php 。不过SPA有些不同。... 因为在后端的Laravel程序中存在一个万能路由, 这意味着前端也需要这么一个万能路由,当访问路径与已经定义的路由不匹配时以一个404页面作为响应。
一个索引页可以存储数量更多的索引记录,这意味着在索引中查找时在I/O上占很大的优势,理解这一点有助于从本质上了解使用索引的优势。 3.索引的类型 A)聚集索引,表数据按照索引的顺序来存储的。...特殊情况: A)如果新插入的一条记录包含很大的数据,可能会分配两个新数据页,其中之一用来存储新记录,另一存储从原页中拆分出来的数据。 B)通常数据库系统中会将重复的数据记录存储于相同的页中。...如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。如果回收的数据页位于跟该表的其它数据页相同的段上,那么它可能在随后的时间内被利用。...如果该数据页是该段的唯一一个数据页,则该段也被回收。 对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即所谓的“索引合并”。...如果该表上有其它非聚集索引,则它们叶子结点上的相应数据也要删除。 如果删除的数据是该数所页中的唯一一条,则该页也被回收,同时需要更新各个索引树上的指针。
一个索引页可以存储数量更多的索引记录,这意味着在索引中查找时在 I/O 上占很大的优势,理解这一点有助于从本质上了解使用索引的优势。...特殊情况: A ) 如果新插入的一条记录包含很大的数据,可能会分配两个新数据页,其中之一用来存储新记录,另一存储从原页中拆分出来的数据。 ...3 )聚集索引与删除操作 删除行将导致其下方的数据行向上移动以填充删除记录造成的空白。 如果删除的行是该数据页中的最后一行,那么该数据页将被回收,相应的索引页中的记录将被删除。...对于数据的删除操作,可能导致索引页中仅有一条记录,这时,该记录可能会被移至邻近的索引页中,原索引页将被回收,即所谓的“索引合并”。...如果该表上有其它非聚集索引,则它们叶子结点上的相应数据也要删除。 如果删除的数据是该数所页中的唯一一条,则该页也被回收,同时需要更新各个索引树上的指针。
laravel中间件做什么? HTTP 中间件是一种用于过滤 HTTP 请求的技术。 Laravel 包含一个中间件,用于检查应用程序用户是否已通过身份验证。...left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 ; right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录; inner join(等值连接...实现乐观锁常见的方式:版本号version实现方式,在数据表中增 加版本号字段,每次对一条数据做更新之前,先查出该条数据的版本号,每次更新数据都会对版本号进行更新。...rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS锁,但是无法修改这些记录直到你这个加锁的session执行完成(否则直接锁等待超时)。...如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。 2.
本文实例讲述了laravel框架学习记录之表单操作。...分享给大家供大家参考,具体如下: 1、MVC数据流动 拿到一个laravel项目最基本的是弄清楚它的页面请求、数据流动是怎样进行的,比如当通过get请求index页面时,如何显示如下的学生信息列表: ?...提供了validate方法来用于验证用户提交的表单是否符合要求,例如在页面通过post提交了学生表单form后,在controller中对其先进行验证,如果正确则存入数据库,否则返回到上一页面并抛出一个异常...}" 5、错误记录 ①、 MethodNotAllowedHttpException No message 这个错误是因为我把表单的post请求发送到了Route::get()定义的路由上,它不会处理...这是由于laravel自动设置了防止CSRF跨域攻击,你需要在表单内添加csrf_filed()来告诉laravel请求的发起人与表单提交者是同一个人。
在 Java、Golang 这些支持多线程/协程的应用代码中,我们可以通过开启多线程/协程的方式实现文件存储的异步处理,而在 PHP 这种不支持并发编程的单进程应用中,只能在同一个用户请求处理进程中实现文件存储...实际上,我们可以把很多多进程编程的理念应用到这里来。...在 posts 表中也可以看到相应的 image_id 字段已更新。 清空文章详情页缓存,就可以看到图片和浏览数被正常渲染了: ?...不过这种优化思路的前提是队列处理器进程可以访问这个临时文件路径,如果队列处理器和 Web 应用在同一台机器,或者临时文件存储在共享目录,这种方案是可行的。...就可以看到临时图片被删除,新的图片存储到 public/images 目录下,数据库记录和字段都更新了。清空文章详情页缓存,就可以看到图片和浏览数可以正常渲染: ?
Mysql原理篇之索引是如何一步步实现的---上--02 前言 从一条记录说起 如何管理多条记录---页 记录的存储格式 COMPACT行格式 行溢出 页是如何管理多条记录的 如何快速定位页中某一条记录...而我们知道读写磁盘的速度非常慢,和内存读写差了几个数量级,所以当我们想从表中获取某些记录时,InnoDB存储引擎需要一条一条的把记录从磁盘上读出来么?...,之后如果有新记录插入到表中的话,可能把这些被删除的记录占用的存储空间覆盖掉。...这里我们假设一个页中最多存放三条记录 我们往一张demo表中插入三条记录,这三条记录被存储到页10上: 此时如果我们再插入一条记录呢?...---- 由于数据页的编号可能并不是连续的,所以在向表中插入许多条记录后,可能是这样的效果: 因为这些16KB的页在物理存储上可能并不挨着,所以如果想从这么多页中根据主键值快速定位某些记录所在的页
但mysql5之后,默认的存储引擎已经变成了:innodb,它是我们建表的首选存储引擎。 那么,问题来了: innodb底层是如何存储数据的? 表中有哪些隐藏列? 用户记录之间是如何关联起来的?...数据页主要是用来存储表中记录的,它在磁盘中是用双向链表相连的,方便查找,能够非常快速得从一个数据页,定位到另一个数据页。 很多时候,由于我们表中的数据比较多,在磁盘中可能存放在多个数据页当中。...如果表中没有主键,假如有不为null的unique唯一键,则用它做为行id,同样无需额外创建。 如果表中既没有主键,又没有唯一键,则数据库会自动创建行id。...5.页目录 从上面可以看出,如果我们要查询某条记录的话,数据库会从最小记录开始,一条条查找所有记录。如果中途找到了,则直接返回该记录。如果一直找到最大记录,还没有找到想要的记录,则返回空。...so easy 6.文件头部和尾部 6.1 文件头部 通过前面介绍的行记录中下一条记录的位置和页目录,innodb能非常快速的定位某一条记录。但有个前提条件,就是用户记录必须在同一个数据页当中。
在上一篇教程中,我们基于 Eloquent 模型实现了对数据表记录的增删改查操作,今天我们在此基础上介绍两个 Eloquent 模型提供的高级功能 —— 批量赋值和软删除。...实现原理 Eloquent 模型类为我们提供了「软删除」功能的支持。这就意味着,在 Laravel 中,我们不需要编写任何额外代码就可以实现对数据库记录的「软删除」。...这样我们在模型类上做所有常规查询操作的时候就会过滤掉被软删除的记录(这些常规查询在上一篇教程中已经给出)。...注:你也可以修改这个默认约定的 deleted_at 字段,但何必费这个劲呢,除非你是从其它系统迁移过来的,原来的表结构已经存在了,这时候可以通过再模型类中设置静态属性 DELETED_AT 来自定义软删除字段...要软删除一条记录,在对应模型类实例上调用 delete 方法即可,底层会自动将数据表的 deleted_at 字段设置为当前时间,表示该记录已经被「删除」。
记录头信息里面有很多属性,最容易理解的就是next_record指针,单链表都会有next指针,这样才会找得到下一个结点,这对于页中的每条记录也是一样,上一条记录需要知道下一条记录在哪里。 ...记录,3表示Supremum记录 next_record 16 表示本条记录真实数据部分到下一条记录真实数据的距离 从表中所说可以看到,记录头信息一共是40bit就是5个字节 2.记录在页中的存储结构...4.当记录被删除,页中记录存储结构如何变化? 当然最大的疑问就是被删除的记录还在页中么? 是的,你以为记录删除了,可它还在真实的磁盘上(占用空间依然存在)。...,记录在这个链表中占用的空间称为可重用空间,之后如果有新记录插入到表中的话,它们就可能覆盖掉被删除的这些记录占用的空间。...5.当删除的记录再次被插入,页中记录存储结构如何变化?
而且我也是从Java,golang裸转的php。这里不谈那种语言好坏之分。开发来说,拥抱技术,拥抱变化,公司用什么技术栈,你就用什么技术。熟练开发就好了。...这里记录一下php框架laravel进行保姆级开发。...关联表的主键 protected $fillable = [ // 3.允许被批量操作的字段, 相当于python的一个Meta中的序列器 '...,则无法区分同一个类的不同实例 $key = md5($className . ':' . serialize($args)); if (!...$userMod->delete($data) 一般删除是采取软删除,不会把数据真正删除掉。
领取专属 10元无门槛券
手把手带您无忧上云