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

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

思考:如何提高Model层查询DB效率?如何精简代码?...:优化前5条sql,优化后2条sql laravel-upsert 扩展特性 安装 composer require staudenmeir/laravel-upsert:"^1.0" 用法 插入和更新...这可以是单个记录或多个记录。 第二个参数是唯一标识记录列。除 SQL Server 外所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新列作为第三个参数(可选)。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...LaravelUpsert\Eloquent\HasUpsertQueries; 因为我们数据库时间是int类型,不是laravel默认时间格式,并且我们插入时间和更新时间也不是laravel默认字段

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

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

引言 上一节我们讲了通过模型方法新建条目,或者更新数据。对于写操作还有更为重要一个方法, 就是数据删除。删除数据,有物理删除和软删除区别。 ?...我们从软删除使用,再顺便说一说模型内作用域概念。 代码时间 常规删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型方法, 则返回是一个模型对象。...数据库表内记录直接移除了,这在重要表, 比如user,order,payment这些关系用户权限,资金支付等等重要数据资源上,物理删除是不被允许。...大家注意, 想我们常规操作一样,就是获取一个时间戳$time, 然后把字段赋值: $this->deleted_at = $time; 最后使用update方法更新模型,并修改数据库条目。...写在最后 本文从laravel模型写操作删除动作,讲到了软删除概念。进而引申出来本地作用域和全局作用域使用。软删除几乎贯穿了我们应用始终,需要大家勤学苦练。

1.3K30

如何使用acme.sh自动获取更新Let’s EncryptSSL证书?

本文主要记录使用dnspod api 自动申请ssl证书 站点HTTPS检测:https://myssl.com/ 仓库地址 https://github.com/acmesh-official/acme.sh...,所有修改都限制在安装目录中,安装后会自动添加一个自动更新证书定时任务。...,可修改>后路径,保存每次更新日志; 参考文档:https://github.com/acmesh-official/acme.sh/wiki/How-to-install 使用配置 1.帐户注册.../acme.sh --register-account -m 1747111677@qq.com 2.获取dnspodapi秘钥 相关文档:https://github.com/acmesh-official...HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP 另外,如果中间人使用自己自签名证书来进行攻击,浏览器会给出警告

4K21

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

使用Laravel ORMModel方法find, get, first方法获取数据对象时返回数据对象attributes属性数组里会包含数据表中所有的字段对应键值关系, 那么如何在ORM查询时只返回数据表中指定字段数据呢...Builder是依赖查询构建器\Illuminate\Database\Query\Builder,first和get方法源码在Query Builder里如下: /** * Execute...LaravelORM方法查询返回指定字段可通过如下三种方法来实现 $data = ModelA::find($id, ['column1', 'column2']); $data = ModelA...'column2']); $data = ModelA::where(['column1', '=', 'value'])- get(['column1', 'column2']); 在不同场景下三者中选符合需要使用即可...以上这篇Laravel Eloquent ORM 实现查询表中指定字段就是小编分享给大家全部内容了,希望能给大家一个参考。

3K21

Laravel学习记录--Model

,如果是单条记录获取关联关系,就需要两次查询;如果是多条记录获取关联关系,比如文章列表页获取作者信息,因为每篇文章作者通过动态属性获取都有一次查询,所以对N条记录来说,需要N+1次查询才能返回需要结果...使用渴求式加载,即根据预先需求查询出所有数据 为了验证[渴求式加载]好处,举下列例子 这里用到了Laravel Debugbar 调试 安装方法可参照我另一个博客 - - - Laravel...当获取模型记录时,你可能需要根据不存在关联对结果进行限制,如获取没有电话号码用户记录,为了实现这个功能你可以使用doesntHave,并传递关联方法 如 public function show...,并且没有放在数组里id会被移除,如果是这样的话那1号学生选修课程1将被移除,同时会向中间表添加课程id=9记录 接下来看他执行过程是否与我们想一样 通过Laravel Debugbar...有时候你需要更新中间表中已经存在记录使用updateExistingPivot方法 该方法接受中间记录另一个外键和一个关联数组进行更新 public function show(){

13.2K20

orm 系列 之 Eloquent演化历程2

本文是orm系列第三篇,也是Eloquent演化第二篇,Eloquent系列会尝试着讲清楚Eloquent是如何一步一步演化到目前功能强大版本,但是毕竟个人能力有限,不可能分析非常完善,总会有不懂地方...:是前一篇讲对于Active Record模式中Model功能,包括了Model、Builder和Relation功能,忘记可以去看前一篇orm 系列 之 Eloquent演化历程1内容 Query...来实现,最终是通过将执行记录以log形式插入到数据库中。...首先是morphMany构造函数: public function __construct(Builder $query, Model $parent, $morphName) { $this...Manager,记得网上搜索过关键字Using Eloquent outside Laravel,我们可以看到一篇Vivek Kumar Bansal写文章,文章从2方面介绍了怎么使用Eloquent

2.4K30

Laravel源码解析之Eloquent Model

上篇文章我们讲了Database查询构建器Query Builder, 学习了Query Builder为构建生成SQL语句而提供Fluent Api代码实现。...这篇文章我们来学习Laravel Database地另外一个重要部分: Eloquent Model。...'age' => 28, ... ] 设置好属性新值之后执行Eloquent Modelsave方法就会更新数据库里对应记录,下面我们看看save方法里逻辑: abstract class...Model删除 Eloquent Modeldelete操作也是一样, 通过Eloquent Builder去执行数据库连接Query Builderdelete方法删除数据库记录: //Eloquent...是在Query Builder基础上做了进一步封装, Eloquent Builder会把这些CRUD方法调用转给Query Builder里对应方法来完成操作,所以在Query Builder里能使用方法到

2.2K50

orm 系列 之 Eloquent使用2

} else { $saved = $this->performInsert($query); } 我们可以看到Model中有个属性exists表明记录是否在数据库中,此处还有个有意思函数isDirty...original,然后通过现在attributes和original比较来知道哪些字段需要更新,在执行更新操作时候,自然就是下面的操作了,只会跟新dirty字段。...都是通过调用Eloquent/Builder来实现。...Hydrate 这个功能其实我们在之前The Clean Architecture in PHP 读书笔记(十)就提到过这个问题,如何能在数据库中记录和我们Model之间进行转换,此处有转换有两个方向...key和Modelattribute对应,Eloquent方法是直接将属性存储为一个$attributes数组,然后由用户自己根据字段名进行获取,但是,其实这也会有个问题,就是一旦字段名更改了,我们必须要去更改所有直接使用字段名地方

53041

laravel + passportAouth2.0全解

二、心得&重点: 1、完全理解透彻一次使用 1、一定要把Aouth2.0和laravel自带API区分开。...3、Aouth2.0授权模式过程: A、每运行一次php artisan passport:client生成一个用户端 B、每使用不同ID请求都出现一次授权页面(用户端通过授权模式获取access_token...),但改access_token能获取权限还是上次登录用户东西。...C、要获取其他用户信息,就要重新登录,就要清除Cookie(postman在send按钮下方,红色) 三、问题:矛盾点: 1、laravel/framework我是更新到了7.2。...每运行一次生成一个用户端、每使用一个请求都出现一次授权页面(用户端通过code模式获取access_token) 1.2 模拟客户端全配置: 文件:routes/web.php <?

3.6K30

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

分享给大家供大家参考,具体如下: laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\...,[5]); 2.查询构造器[Query Builder] laravel查询构造器提供了方便流畅接口,用来建立及执行数据库查找语法。...findOrFail()查找不存在记录时会抛出异常 $student=Student::find(5); //主键为5记录 var_dump($student['attributes']); //查询构造器使用...新增数据、自定义时间戳、批量赋值 (1)使用save方法新增 laravel会默认维护created_at,updated_at 两个字段,这两个字段都是存储时间戳,整型11位,因此使用时需要在数据库添加这两个字段...修改数据 使用save方法更新模型 使用update方法更新数据(和create相对应,Eloquent模型类还支持使用update方法更新数据,同样要用到批量赋值) //通过模型更新数据 $student

2.8K20

Laravel源码分析之模型关联

按照Laravel设定好模式来写关联模型每个人都能写出高效和优雅代码 (这点我认为适用于所有的Laravel特性)。...说了这么多下面我们就通过实际示例出发深入到底层看看模型关联是如何解决数据关联匹配和加载关联数据。 在开发中我们经常遇到关联大致有三种:一对一,一对多和多对多,其中一对一是一种特殊一对多关联。...多对多 多对多关联不同于一对一和一对多关联它需要一张中间表来记录两端数据关联关系,官方文档里以用户角色为例子阐述了多对多关联使用方法,我们也以这个例子来看一下底层是怎么来定义多对多关联。...动态属性加载关联模型 上面我们定义了三种使用频次比较高模型关联,下面我们再来看一下在使用它们时关联模型时如何加载出来。...= $this->applyScopes(); //获取模型时会去加载要预加载关联模型 if (count($models = $builder->getModels

9.5K10

Laravel Eloquent 模型关联关系(下)

今天我们将在定义好模型关联基础上进行关联查询、插入和更新操作,看看如何借助模型关联提高代码可读性并提高编码效率。...,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询,而 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...(1); 这样就可以嵌套获取到 profile 表记录信息: 这里会涉及到三个 SQL 查询: select * from `posts` where `posts`....这样,我们就不需要在每个地方去判断如果文章作者信息为空该如何处理了,因为这种情况下返回也是一个正常 User 模型实例。...(31); $comment->content = 'Laravel学院致力于提供优质Laravel中文学习资源'; $comment->save(); 再次查看评论模型及对应文章模型数据,可以看到文章模型更新事件和评论模型更新时间已经一致了

19.5K30
领券