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

Laravel代码简洁之道和性能优化

思考:如何提高Model层查询DB的效率?如何精简代码?...经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...,优化后22行代码,代码行数少了3倍+ 查询sql的条数:优化前5条sql,优化后2条sql laravel-upsert 扩展的特性 安装 composer require staudenmeir/laravel-upsert...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...当然了还是有一些注意点和坑,下面分享一下 注意的问题 要根据需求添加唯一索引 根据官方文档中的说明,我们的model中必须添加这行代码,才能以Eloquent的方式用 use \Staudenmeir\

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

    【Laravel系列4.1】连接数据库与原生查询

    Laravel 框架中的 DB 和 ORM 是两个不同的组件,关于 ORM 的概念,我们也将在相关的学习中了解到,但是现在我们先从简单的普通查询学起。...原生查询 接下来,我们就学习怎么使用原生 SQL 语句进行数据库操作。...没错,前面也说过,本身 Laravel 的数据库操作就是使用的 PDO 的,不记得的小伙伴可以移步 【PHP中的PDO操作学习(四)查询结构集】https://mp.weixin.qq.com/s/dv-lnEGV0JlGsjy4rl_jkw...注意,insert() 方法返回的结果是一个布尔值,也就是添加操作的成功失败情况,如果我们想获取新增加的数据的 id ,需要使用 DB::getPdo()->lastInsertId(); 这条语句才可以获取到...")); }); 注意看代码,其实我们只是多使用了一个 connection() 方法。

    3.2K50

    【Laravel系列4.2】查询构造器

    不过相对来说,模型需要每个表都建立,而且表间关系复杂的话 Model 类也会比较复杂,而查询构造器会更简单而且更方便使用。...在 Laravel 中,默认情况下这个值设置的就是 PDO::FETCH_OBJ 。关于如何修改成 PDO::FETCH_ASSOC ,我们会在后面的文章中学习。...我们又发现了一个设计模式在 Laravel 框架中的应用,意外不意外,惊喜不惊喜! 连表查询 普通的连表查询的使用还是非常简单的,我也就不多说了,下面的代码中也有演示。...(比如记录插入前最后一条的 ID 值然后再查询一次大于这个 ID 的所有数据的 ID 值) Route::get('db/test/batch/insert', function () { $data...不过它会中断程序的运行,我们还有另一个方法 dump() ,输出的内容是和这个 dd() 方法完全相同的,但它不会中断程序的运行。 有这三大神器,相信你对 查询构造器 的调试就能够得心应手了吧!

    16.8K10

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

    我们在关系型数据库中,一行数据就可以看成是一个对象,整个表就可以看成是这个对象的列表。这就是非常简单地针对 ORM 的理解。 Java 中的 Hibernate 就是早期非常经典的 ORM 框架。...db_sex 表的模型,这个表是上篇文章中测试时使用的,就直接拿来使用了。...里面的东西是什么,则是根据我们的 MTest 这个 Model 里面的 sex 字段的值来确定的,也就是 $this->child->{$this->foreignKey}这一段。...这个参数是可选的,如果不填,它会默认找一个叫做 sex_id 的值,当然,在我们的数据中是没这个字段的,所以我们指定为 sex 。...当然,这只是最简单的一种一对一的关联,Laravel 框架中还可以实现非常复杂的关联,包括一对多,多对一,多对多的关联,这些内容还是大家自己研究怎么使用吧,毕竟我们文章的主旨还是在于搞清楚它们是怎么运行的

    8.9K20

    Laravel利用redis和定时任务实现活跃用户统计

    最近在Summer的《Laravel教程-Web开发实战进阶》学到很多东西,以前只会看文档,大概了解Laravel的内容而在实际运用中确不知道该怎样做,碰到一个需求不会立马联想到“这个东西可以用...实现...不是有句话”实践是检验真理的唯一标准“ 所以学习编程还是要多实践多写项目,不然就像我一样拿到东西不知道怎样运用 废话不多,今天分享一下利用redis和定时任务实现活跃用户统计 如果你对redis和定时任务不了解建议去补一下...// 并且同时取出用户此段时间内发布话题的数量 $topic_users = Topic::query()->select(DB::raw('user_id, count...// 并且同时取出用户此段时间内发布回复的数量 $reply_users = Reply::query()->select(DB::raw('user_id, count...php artisan larabbs:calculate-active-user 获取最新的活跃用户,所以我们利用定时任务实现 在当前下面输入 export EDITOR=vi && crontab

    94020

    06.Django基础五之django模型层(二)多表操作

    一 创建模型 表和表之间的关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束...书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系...,第三种方式还是可以使用多对多关联关系操作的接口(all、add、clear等等)       当我们使用第一种方式创建多对多关联关系时,就无法使用orm提供的set、add、remove、clear方法来管理多对多的关系了...through 在使用ManyToManyField字段时,Django将自动生成一张表来管理多对多的关联关系。...咱们的表里面包含了一对一、一对多、多对多的关系,我们基于这几个表来练习,将来无论有多少张表,都逃脱不了这三个关系,操作起来都是一样的。

    2.7K20

    Laravel Eloquent 模型关联关系(下)

    ,如果返回的文章结果是列表的话,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...另外,如果访问的是模型实例上的 author() 方法时,返回的不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链的方式构建查询构建器进行更加复杂的查询,我们以一个一对多的查询为例...基于关联查询过滤模型实例 有结果过滤 有的时候,可能需要根据关联查询的结果来过滤查询结果,比如我们想要获取所有发布过文章的用户,可以这么做: $users = User::has('posts')->get...: 结语 好了,关于关联关系我们就介绍到这里,我们分了三篇的篇幅来介绍 Eloquent 模型的管理关系,回顾一下,主要包含以下内容: 七种关联关系的定义:一对一、一对多、多对多、远层一对多、一对一的多态关联...、一对多的多态关联、多对多的多态关联; 以上关联关系的查询,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新、插入和删除操作。

    19.6K30

    自动化平台开发小结(四)

    今天对备份恢复和元数据的功能点进行了改进,突然发现需要做的事情远比想象的要多。...而且尤其让我有些不得力的是ORM的API,对于增删改查来说是足够了,但是我要实现一些相对复杂的统计需求的时候,这种方式就很受限了,使用raw的方式吧,有些SQL可能会写的比较长,而且查询结果很可能不需要主键...Django的流行可以参考这篇:为什么 Django 能持续统治 Python 开发世界 所以纠结贵纠结,Django的这些扩展支持是有的。比如我要实现一个复杂的查询需求。...,而平常使用的增删改查使用Django API足矣。...如此一来,我一直比较纠结的多对多的一些映射关系和定制也有了新的思路。 可能我就可以直接基于ORM来做一些深度的定制,而不完全依赖外键关系。 明天继续大搞一场,把剩下的功能搞定。

    80350

    Laravel学习记录--Model

    多态关联 - 多态一对 - 多态一对多 - 多态多对 关联查询 继承:ILLuminate\Database\Eloquent\Model model与表名的关系...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]的好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我的另一个博客 - - - Laravel...(articles),用户与文章是一对多的关系,国家与用户也是一对多的关系,那么怎么实现根据不同的国家显示对应的文章?...); } 显示结果 图片 多态一对多反向关联(根据文章或用户查询对应的评论信息) 由于文章/用户跟评论的关系是一对多,所以需要使用morphMany方法 morphMany($related,...当获取到模型记录时,你可能希望根据存在的关联对结果进行限制,如,获取有电话号码的用户,为了实现这个功能 可以通过has()方法,将建立关系的方法名传递给has即可 如 public function

    13.6K20

    python 终级篇 django --

    -->>>> 一     正向查询 一 ----->>>>多    反向查询 表关系结果如下: class Publisher(models.Model): name = models.CharField...print(ret)                                  ManyToManyField                                 "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器...也就是什么情况下使用管理对象---->>>> 它存在于下面两种情况: 外键关系的反向查询 多对多关联关系 简单来说就是当 点后面的对象 可能存在多个的时候就可以使用以下的方法。...总结: 1. select_related主要针一对一和多对一关系进行优化。...对于多对多字段(ManyToManyField)和一对多字段,可以使用prefetch_related()来进行优化。

    2.9K20

    初识Sys · 轻松掌握MySQL系统库配置表

    通过修改这个表,可以轻松对系统配置进行持久化管理,也就是说,即使重启数据库,配置也不会丢失。sys_config 表提供了一个集中管理 MySQL 系统配置选项的方式,允许用户根据需要进行调整和优化。...默认值为 OFF,表示不扫描。diagnostics.include_raw:决定是否在 diagnostics() 的输出中包含原始数据。默认值为 OFF,表示不包含原始数据。...要恢复默认值,可以将自定义变量设为 NULL:SET @sys.statement_truncate_len = NULL;配置项的优先级在 MySQL 5.8 中,sys 系统库对配置的读取是有优先级的...= 50;执行此操作后,任何基于 statement_performance_analyzer() 的查询都将返回最多 50 行。...使用这些配置项和触发器时,务必注意 mysql.sys 用户的权限管理,以及会话变量与 sys_config 表配置的优先级关系,以避免潜在的配置冲突问题。

    25410

    MongoDB学习整理

    索引 5.1 普通单列索引 5.2 多列索引(复合索引) 5.3 子文档索引 5.4 唯一索引 5.5 查询索引 5.6 删除索引 5.7 重建索引 5.8 注意事项 6....概述 MongoDB 是介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的,语法类似javascript面向对象的查询语言,是一个面向集合的、模式自由的文档型数据库。...是否修改多条: 若值是1(true),满足条件的若有多个文档则都要修改 方法2: 使用修改器 $inc : 加一个数字 $set : 修改某一个字段,如果字段不存在则增加 语法: db....多列索引(复合索引) 语法: db.....ensureIndex({name:-1},{unique:true}) 5.5 查询索引 # 查看当前索引状态 db.test.getIndexes() # 详情查看本次查询使用哪个索引和查询数据的状态信息

    58120
    领券