首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

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

    因为设计的原因,laravel支持的链式操作 本质上方法的返回值归属于不同的类。所以在使用方法之前务必明确调用的是哪个类的那个方法,返回的是什么类型的数据。...学习时间 让我们从最简单的例子开始,就是获取数据库表内所有的条目,返回一个集合。...eloquent门面为我们提供了很多好用的链式操作方法, 在query builder筛选出合适的条目后,返回一个eloquent collection,或者是一个 基类的collection对象,可以直接使用集合的方法操作数据集...所以我们推荐使用where语句进行数据库SQL操作,将合适的结果集返回,这样精简了数据库负载, 再者,使用集合的操作方法,对结果集进行进一步的格式化,效率会高的多。...如果数据量有点大,要分批次将结果返回, 但是又不知道总量多少,则可以使用分块返回的方式,手动指定每次查询的条目数, 依次将结果集拿出来: Contact::chunk(100, function ($contacts

    2.8K40

    Laravel拼装SQL子查询的最佳实现

    学习时间 对于数据库DBA可能更习惯从SQL的角度出发,从SQL现有的语言结构和功能上解决问题。...写多了容易无解,直接上SQL: ? 大家注意那个 IN 子句,其实是一个查询结果集,从另个表返回的。 写SQL真的很伤神,不如用框架自带的orm,操作起来非常人性化,拼装也很简单。...不止一个方法 解决问题的方法永远不止一个,在Laravel中你还可以不像上一节那样,虽然很明确,写的很标准,可是并不是所有开发者都能达到那样的熟练度。 我们说说通用的,一般开发者所能想到的一些方法。...写在最后 本文通过一个SQL语句查询在Laravel中的实现方式,解释了laravel在拼装SQL查询时的自由度,使用起来非常灵活。...对于固定的查询方式,或者经过优化的SQL语句,你大可直接发送给Laravel直接运行以便提高效率。

    4.5K10

    Laravel 5.3之 Query Builder 源码解析(中)

    Grammar将会把Query Builder的fluent api编译成SQL,PDO编译执行该SQL语句得到结果集results,Processor将会处理该结果集results。...该Builder还必须装载两个神器:Grammar SQL语法编译器;Processor SQL结果集后置处理器。...并且,在$bindings[]属性中把where过滤器与值相互绑定存储,如果有多个where过滤器,就类似这样绑定,['where' => [1, 'laravel', ...], ...]。...Grammar将会把Query Builder的fluent api编译成SQL,PDO编译执行该SQL语句得到结果集results,Processor将会处理该结果集results。...并且,在$bindings[]属性中把where过滤器与值相互绑定存储,如果有多个where过滤器,就类似这样绑定,['where' => [1, 'laravel', ...], ...]。

    3.9K31

    通过 Laravel 查询构建器实现复杂的查询语句

    查询小技巧 我们首先来介绍几个 Laravel 自带的语法糖,可以帮助我们快速获取期望的查询结果,提高编码效率。...有时候,我们想要获取的并不是一行或几行记录,而是某个字段的值,你当然你可以查询到一行记录后从结果对象中获取指定字段的值,但是 Laravel 为我们提供了更便捷的语法: $name = '学院君'; $...你一定有过这样的经历,从数据库获取指定查询结果后,以主键 ID 值为键,以某个字段值为值构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样的问题,在 Laravel 中,我们只需在查询构建器上调用...此外,有的时候,我们从数据库返回的结果集比较大,一次性返回进行处理有可能会超出 PHP 内存限制,这时候,我们可以借助 chunk 方法将其分割成多个的组块依次返回进行处理: $names = [];...'>', 0)->get(); 上述代码表示获取 where id 0 的数据库记录,多个 and 查询可以通过多个 where 方法连接,同理,多个 or 查询也可以通过多个

    32.3K20

    通过 Laravel 查询构建器实现简单的增删改查操作

    通过前面几篇教程的预热,我们已经连接上数据库,创建好了数据表,填充好了数据,接下来,就是在 Laravel 应用中实现对数据库的增删改查了。...Laravel 数据库功能的核心就是提供流式接口与数据库进行交互的查询构建器(Query Builder),支持 MySQL、Postgres、SQLite 和 SQL Server 等常见的数据库管理系统...由于 Laravel 数据库功能底层基于 PHP 的 PDO 实现,因此我们可以借助 PDO 的参数绑定功能来防范 SQL 注入,所以对于指定查询条件的 SQL 查询语句,可以这么实现: $name =...,此时返回的就是指定查询条件的结果: 如果你要设置多个查询条件,添加多个绑定参数即可。...str_random(10), 'email' => str_random(8) . '@163.com', 'password' => bcrypt('secret') ]); 如果想要在插入之后获取对应记录的主键

    5.1K20

    Laravel Eloquent 模型关联关系(下)

    从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身的获取,总共需要进行 N + 1 次查询,而 PHP 对数据库的连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...基于关联查询过滤模型实例 有结果过滤 有的时候,可能需要根据关联查询的结果来过滤查询结果,比如我们想要获取所有发布过文章的用户,可以这么做: $users = User::has('posts')->get...统计关联模型 我们还可以通过 Eloquent 提供的 withCount 方法在不加载关联模型的情况下统计关联结果的数量。...,通过 IN 查询获取关联结果,并将其附着到对应的模型实例上,在后面访问的时候不会再对数据库进行查询。

    22.7K30

    CVE-2021-39165: 从一个Laravel SQL注入漏洞开始的Bug Bounty之旅

    测试的过程就不说了,经过测试,我获取了下面的结果: 当第一个参数key可控时,传入任意字符串都会报错,具体的错误为“unknown column”,但类似反引号、双引号这样的定界符将会被转义,所以无法逃逸出...SQL语句,会导致其中至少有一个SQL语句在UNION SELECT的时候出错而退出。...主要是在初始化PDO的时候设置了PDO::ATTR_EMULATE_PREPARES为false,而数据库默认的参数化查询不允许prepare多个SQL语句。...无法堆叠执行的结果就是没法执行UPDATE语句,我只能通过注入获取一些信息,想要进一步执行代码,还需要继续审计。...我添加了一个内容是{{ 233 * 233 }}的Incident Template,渲染结果被成功返回在API的结果中: Twig是PHP的一个著名的模板引擎,相比于其他语言的模板引擎,它提供了更安全的沙盒模式

    2.2K20

    ThinkSNS Plus PHP开发概述

    #函数 在许多集成环境中,默认会禁用一些函数,当然,这些函数在 Plus 的 Web 服务中不是必须的,但是如果你在 CLI 环境下操作,这些函数将会成为必须: · exec · system · scandir...· Microsoft SQL Server 就像不推荐 SQLite 一样,我们同样不推荐 Microsoft SQL Server 除非你确定你的系统不适用 Emoji 那么你可以无顾虑的使用 Microsoft...SQL Server 了,因为 Microsoft SQL Server 同样支持 utf8 字符集,却无法支持四位长度的 Emoji 字符。...WARNING 答应我,在 SQLite 和 Microsoft SQL Server 没有很好默认支持 Emoji 之前,暂时用 MySQL 或者 PostgreSQL 好吗?我是认真的!...#教程说明 从后面的教程开始,我们将从零基础开始教学,教学环境为 CentOS 7.4 版本的 Linux。

    1.2K30

    3分钟短文 | Laravel同时连接多个数据库,你用啥办法?

    引言 在巩固了基础知识之后,我们把目标转向框架的学习。Laravel 是一个全球流行的框架,开发者和使用者都比较活跃,周边有许多库,和第三方资源均提供了支持。...所以经过拆分的数据库需要我们建立多个连接。 一般我们在 .env 文件内指定本地或者线上使用的配置项。这样做比较灵活,很容易区分出不同的设置。...sql,需要这样写: $users = DB::connection('mysql2')->select(...); 当然了,我们不推荐在程序内进行原生sql操作,因为这样破坏了数据库表字段的可追溯性,...Laravel 的灵活还不止这一点半点,如果在Model内不指定$connection,你还可以在控制器内,在命令行程序内,在队列内,在中间件内,在监听器内,都可以任意指定某个Model连接: class...写在最后 本文通过多种方法,演示了Laravel从数据库连接配置,到程序内使用的方方面面。还没有体验这个框架的同学,你真的值得一试了。 Happy coding :-)

    1.7K10

    关于 Laravel 应用性能优化的几点建议

    ,在更高级别的并发请求上,肯定是以卵击石了,毕竟人家是数十万台机器构建的、服务于全国亿万用户的庞大集群。...CDN 加速、数据库查询、缓存和队列系统引入等: 服务器启用 PHP OPcache 扩展缓存 PHP 字节码; 使用 CDN 访问静态资源(图片、JS、CSS 文件)减轻带宽负载; 对于所有高频业务 SQL...作为缓存驱动); PHP 本身不支持并发编程,但是可以引入队列系统异步处理耗时任务,比如邮件发送、涉及数据库操作的数据统计和更新、事件监听和处理等,通过多个队列进程实现并发处理效果(Laravel 本身支持多种队列驱动...注:以上三个优化手段在 Laravel 部署文档中都有提及,从 Laravel 8 开始,路由缓存开始支持闭包路由,此前是不支持的,需要将所有路由处理重构为基于控制器动作方可,此外,运行 php artisan...小结 结合前端 Vue.js 框架和 Bootstrap CSS 框架,Laravel 向来在 Web 应用全栈开发方面所向披靡,从 Laravel 8 开始,更是引入对 Tailwind CSS(一个实用优先的工具集

    4.2K21

    2019 开发者调查报告:Java 最流行,Go 最有前途

    Go 语言在本次调查中的表现也十分值得关注,它被称为“最有前途的编程语言”。因为 Go 在 2017 年的份额只有 8%,现在已达到 18%。...调查结果显示有过半用户在工作中使用它。多数人使用单个全局 GOPATH。在同时编辑多个项目的人中,甚至有 2/3 的人仍不倾向于每个项目使用一个 GOPATH。 ?...框架使用方面,WordPress 的份额从 2018 年的 32% 降至 2019 年的 26%,不过 Laravel 巩固了其主导地位,有 50% 的 PHP 开发者使用 Laravel 框架。...例如,20% 的 Scala 开发人员使用 Apache Cassandra,而 70% 的 C# 开发人员使用 MS SQL Server。...最 ‘SQL 的’数据库是 Oracle、MS SQL Server 和 ClickHouse,因为它们约 1/3 的用户以 SQL 作为其主要语言。 ?

    60420

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

    从最早期我们会自己封装一个 MyDB 这种的数据库操作文件,到框架提供一套完整的 CRUD 类,再到现代化的框架中的 ORM ,其基础都是在变着花样的完成数据操作。...从 options 这个参数里面,我们可以看出,Laravel 默认使用的是 PDO 连接的数据库,我也没有研究在 Laravel 中如何使用 mysqli 进行连接,因为 PDO 确实已经是事实的连库标准了...这样,线上、测试和本地环境,就不会互相冲突,也不需要我们在各个环境中进行各种 hosts 修改。 原生查询 接下来,我们就学习怎么使用原生 SQL 语句进行数据库操作。...注意,insert() 方法返回的结果是一个布尔值,也就是添加操作的成功失败情况,如果我们想获取新增加的数据的 id ,需要使用 DB::getPdo()->lastInsertId(); 这条语句才可以获取到...查阅的源代码也在上面的那个文件中哦,大家可以自己去看一看,内容和上面的那两个 statment 方法里面的东西都差不多,也是在返回结果的地方会有些区别。

    4.2K50

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

    经过一番调研之后发现了一个堪称神器的扩展:laravel-upsert 这个 Laravel 扩展为查询构建器和 Eloquent 添加了对 INSERT & UPDATE (UPSERT) 和 INSERT...的强大,不仅减少了代码量,也减少了sql 查询次数,提升了性能。...的条数:优化前5条sql,优化后2条sql laravel-upsert 扩展的特性 安装 composer require staudenmeir/laravel-upsert:"^1.0" 用法...这可以是单个记录或多个记录。 第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。...在 Laravel 5.5-5.7 中,这需要HasUpsertQueriestrait: class User extends Model { use \Staudenmeir\LaravelUpsert

    7.3K20

    Sight——杀手级提升Laravel开发速度的组件现在开源了!

    今天,给大家推存一个Laravel的专用组件:Sight Laravel开发速度可以算是最快的了。但是,现在如果加上Sight,那么,你的开发速度会更加快。 Sight做了什么呢?...Sight是在Server Side实现了一个Presenter层。从而让你把从服务器中查出的数据轻松转换为可展示的数据。...自从有了Sight,Laravel成了唯一支持Server Side的MVP模式的框架。 为什么要用Sight呢? 一、是加快开发速度。 二、国内的Phper都了解,大厂是禁止SQL联表三个表以上的。...查出结果,然后,再FOR循环中嵌套FOR循环去查相关的关联数据。 Sight则是提供了很好的Pluck函数,查出ID后,请求到相关数据交给Sight,Sight会为你拼接好数据。...转换成了时间,把created_by从user id转换成了用户名。

    91000

    3分钟短文:Laravel模型一对一一对多关系真的乱吗?

    使用的时候,先获取Contact条目,然后使用关联方法获取PhoneNumber对象, 代码是这样的: $contact = Contact::first();$contactPhone = $contact...有同学会疑问, 这中间是靠什么办法关联获取的呢?都是数据库的条目,一定是走SQL查询了吧? 没错,laravel也的确是这样做的。...select * from phone_numbers where owner_id = 47; 每一条SQL都充分利用索引,可以准确快速地拿到结果。...我们只需在关联关系基础上,链式调用save方法,传入一个关联模型实例。如果要写入多条的,就传入一个 关联模型实例的数组。...Eloquent Collection,例如: $user = User::first();$usersContacts = $user->contacts; 是集合就可以充分利用集合的函数方法操作数据集。

    2.6K30

    Laravel源码解析之Request

    很多框架都会将来自客户端的请求抽象成类方便应用程序使用,在Laravel中也不例外。...Illuminate\Http\Request类在Laravel框架中就是对客户端请求的抽象,它是构建在 Symfony框架提供的Request组件基础之上的。...方法注释里都清楚地标明了每个方法的执行结果。...创建Request对象 我们可以在Laravel应用程序的 index.php文件中看到,在Laravel应用程序正式启动完成前Request对象就已经被创建好了: //public/index.php...总结 随着Request最终到达对应的控制器方法后它的使命基本上也就完成了, 在控制器方法里从Request中获取输入参数然后执行应用的某一业务逻辑获得结果,结果会被转化成Response响应对象返回给发起请求的客户端

    2.9K20
    领券