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

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

在上一篇教程中,我们通过查询构建器实现了简单增删改查操作,日常开发中,往往会涉及到一些更复杂查询语句,比如连接查询、子查询、排序、分页、聚合查询等等,这一篇教程我们围绕这些内容展开探讨。...有时候,我们想要获取不是一行或几行记录,而是某个字段,你当然你可以查询到一行记录后从结果对象中获取指定字段,但是 Laravel 我们提供了更便捷语法: $name = '学院君'; $...你一定有过这样经历,从数据库获取指定查询结果后,以主键 ID 键,以某个字段构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样问题,在 Laravel 中,我们只需在查询构建器上调用...like查询 有时候我们可能会对字段进行模糊查询,尤其是字符串匹配时候: DB::table('posts')->where('title', 'like', 'Laravel学院%')->get()...字段相等查询 有的时候,我们并不是字段和具体之间进行比较,而是在字段本身之间进行比较查询构建器提供了 whereColumn 方法来实现这一查询: DB::table('posts')->whereColumn

29.9K20

Laravel5.8学习之数据库操作构造器

Laravel 数据库查询构造器创建和运行数据库查询提供了一个方便接口。它可用于执行应用程序中大部分数据库操作,且可在所有支持数据库系统上运行。...Laravel 查询构造器使用 PDO 参数绑定来保护您应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递字符串。...Laravel5.8数据库构造器真是比较强大,但是自己更倾向于对原生SQL语句撰写,嘿嘿,记一下笔记吧!...::table('user')->first(); //find 读取指定id数据 $data = DB::table('user')->find(2); /** * select 各种查询 */...// select 选择打印字段 $data = DB::table('user')->select("name",'pass')->get(); /** * 使用where条件 */ $data =

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

MySQL 查询优化

磁盘往往不是严格按需读取,而是每次都会预读,而且主存和磁盘以页单位交换数据,所以在读取数据不在主存中时,会从磁盘中读取一批数据(页)到主存中。 ? 3....不管在哪种程序优化上,要想快速挺高性能,直接常用、少变更数据直接读取到内存中,使用时候就直接在内存上读取不去磁盘上读取,减少I/O操作,这样就能使程序快上10倍以上。...4)应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select...17)尽量使用数字型字段,若只含数值信息字段尽量不要设计字符型,这会降低查询连接性能,并会增加存储开销。...这是因为引擎在处理查询连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

3.8K111

原 荐 MySQL-性能优化-索引和查询优化

磁盘往往不是严格按需读取,而是每次都会预读,而且主存和磁盘以页单位交换数据,所以在读取数据不在主存中时,会从磁盘中读取一批数据(页)到主存中。 ? 3....不管在哪种程序优化上,要想快速挺高性能,直接常用、少变更数据直接读取到内存中,使用时候就直接在内存上读取不去磁盘上读取,减少I/O操作,这样就能使程序快上10倍以上。...4)应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select...17)尽量使用数字型字段,若只含数值信息字段尽量不要设计字符型,这会降低查询连接性能,并会增加存储开销。...这是因为引擎在处理查询连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

73940

MySQL-性能优化-索引和查询优化

磁盘往往不是严格按需读取,而是每次都会预读,而且主存和磁盘以页单位交换数据,所以在读取数据不在主存中时,会从磁盘中读取一批数据(页)到主存中。 ? 3....不管在哪种程序优化上,要想快速挺高性能,直接常用、少变更数据直接读取到内存中,使用时候就直接在内存上读取不去磁盘上读取,减少I/O操作,这样就能使程序快上10倍以上。...4)应尽量避免在 where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引进行全表扫描,如:select id from t where num=10 or num=20可以这样查询:select...17)尽量使用数字型字段,若只含数值信息字段尽量不要设计字符型,这会降低查询连接性能,并会增加存储开销。...这是因为引擎在处理查询连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

83211

SQL命令 HAVING(一)

符合条件行是条件表达式真的行。条件表达式是一系列逻辑测试(谓词),它们可以通过AND和OR逻辑运算符链接起来。 HAVING子句类似于WHERE子句,它可以在组上操作,不是在整个数据集上操作。...这个字段引用可以是FROM子句中指定任何表中任何字段、使用隐式连接(箭头语法)引用字段、%ID别名或星号(*)。 HAVING子句条件必须应用至少一个非聚合条件。...如果两个以完全相同方式排序,则它们相等。如果一个在第二个之后排序,则该大于另一个字符串数据类型字段排序规则基于字段默认排序规则。默认情况下,它不区分大小写。...因此,两个字符串字段比较字符串字段字符串文字比较(默认情况下)不区分大小写。...但是请注意,两个文字字符串比较区分大小写:其中'ma'='MA'始终false。 BETWEEN谓语 这等效于大于或等于且小于或等于配对。下面的示例使用BETWEEN谓词。

1.4K40

Laravel Validation 表单验证(二、验证表单请求)

您可以通过在 validation 语言文件中定义 values 数组指定自定义表示形式,不是 cc 显示 payment_type : 'values' => [ 'payment_type...日期传递到 PHP 函数 strtotime : 'start_date' => 'required|date|after:tomorrow' 您可以指定另一个要与日期进行比较字段不是传递要由...required 验证字段必须存在于输入数据中,不是空。如果满足以下条件之一,则字段被视为「空」: null 。 字符串空数组或空 Countable 对象。...上面的例子中, unique:users 设置验证规则,等于使用默认数据库连接查询数据库。...语句: 您也可以通过 where 方法指定额外查询条件

29.1K10

(数据科学学习手册28)SQL server 2012中查询语句汇总

返回以A、B、C任意一个开头任意长字符串 LIKE 'L[^A]%'           返回以L开头,且第二个字符不是A,任意长字符串 我们在WHERE中使用LIKE子句来进行字符串模式匹配:...GO 查询结果: 2.5 分组查询   使用GROUP BY子句可以查询结果按照某个字段或多个字段进行分组,字段相等一组。...价格 FROM T WHERE 价格 <= 100)) GO 查询结果: 2.6.2 带比较运算符嵌套查询   带有比较运算符查询是指父查询与子查询之间用比较运算符进行连接...x n会到达上亿行; 2.8.2 内连接查询   内连接(INNER JOIN)使用比较运算符比较连接,并列出与连接条件相匹配数据行。.../* table1中商品名称、店铺名称与table2中商家地址做内连接连接条件两个表中记录商家地址列相等(等值连接) */ USE sample GO SELECT table1.商品名称

6.2K120

MySQL必知必会分页whereupdatelimit字符串截取order by排序ength和char_lengthreplace函数1 键2 数据库事务ACID3 视图4 删除连接

1一样,m可能很大,但由于内部查询只扫描了字段id,不是整张表,所以性能要强于方式1查询,并且该查询能够解决方式2和方式3不能解决问题。...where 类似于 if 条件,根据 MySQL 表中字段读取指定数据 ?...使用主键来作为 WHERE 子句条件查询是非常快速 如果给定条件在表中没有任何匹配记录,那么查询不会返回任何数据 MySQL where字符串比较是不区分大小写。...表 set 列=新 where 更新条件; 可以同时更新若干个字段 可以在 where 子句中指定任何条件 当你需要更新数据表中指定行数据时 WHERE 子句是非常有用 可以在一个单独表中同时更新数据...复合主键 表主键含有一个以上字段组成,不使用无业务含义自增id作为主键 多个字段设置为主键,形成复合主键,这多个字段联合标识唯一性,其中,某几个主键字段出现重复是没有问题,只要不是有多条记录所有主键值完全一样

2.1K140

Laravel Eloquent 模型关联关系(下)

从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,懒惰式加载在每次查询动态属性时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,所以在开发过程中如果想优化性能...,如果返回文章结果是列表的话,需要遍历获取作者信息,假设要循环 N 次的话,加上文章模型本身获取,总共需要进行 N + 1 次查询 PHP 对数据库连接是短连接,每次都要重新连接数据库,所以从性能角度考虑不建议使用这种方式...另外,如果访问是模型实例上 author() 方法时,返回不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链方式构建查询构建器进行更加复杂查询,我们以一个一对多查询例...whereHas/orWhereHas 方法基于闭包函数定义查询条件,比如我们想要过滤发布文章标题中包含「Laravel学院」所有用户: $users = User::whereHas('posts...注:实际开发中为了提高查询性能,我们往往是在 posts 表中冗余提供一个 comments_count 字段,每新增一条评论,该字段加 1,查询时候直接取该字段即可,从而提高查询性能。

19.5K30

3.4 《数据库系统概论》之数据查询—SELECT(单表查询连接查询、嵌套查询、集合查询、多表查询

❶ 算术表达式 ❷ 字符串常量及函数 ❸ 使用列别名改变查询结果列标题 (2)选择表中若干元组(行) ① 关键词DISTINCT去掉表中重复行 ② 查询满足条件元组(行) ❶ 比较大小 ❷ 确定范围...❸ 确定集合 ❹ 字符匹配 ❺ 使用换码字符’\’通配符转义普通字符 ❻ 涉及空查询 ❼ 多重条件查询 (3)ORDER BY子句 (4)聚集函数 (5)GROUP BY子句 5.连接查询...,依次根据其连接字段查询表2索引,从中找到满足条件元组,找到后就将表1中第一个元组与该元组拼接起来,形成结果表中一个元组 (2)等值与非等值连接查询 等值连接连接运算符= [例33] 查询每个学生及其选修课程情况...AND Course.Cname='信息系统'; (5)带有比较运算符查询 带有比较运算符查询是指父查询与子查询之间用比较运算符进行连接。...结果: (6)带有ANY(SOME)或ALL谓词查询 谓词语义: ANY:任意一个 ALL:所有 需要配合使用比较运算符: > ANY 大于子查询结果中某个 > ALL 大于子查询结果中所有

5.7K20

基于 Redis + 资源库模式实现 Laravel 应用缓存功能

今天学院君来给大家演示如何在 Laravel 项目中基于 Redis 实现应用缓存功能,这想必也是很多人日常使用 Redis 最多业务场景,这里缓存指的是数据库查询结果存储到 Redis,其目的是数据加载从磁盘...在 Redis 系列开篇中已经介绍过,我们可以通过字符串数据结构来实现应用缓存,如果缓存是对象实例或者集合而非文本字符串,可以通过序列化方式将其转化为文本格式,读取时候再通过反序列化方式将其还原。...正如前面所说,现在我们可以在资源库 PostRepo 这一层对数据库查询结果进行缓存,不需要调整任何控制器代码。...Redis 连接信息基础上,只需要将 .env 中环境配置项 CACHE_DRIVER 设置 redis 即可使用 Redis 实现缓存功能: CACHE_DRIVER=redis 其底层实现原理是在..._cache'), 默认laravel_cache,所以即便 Cache 门面和 Redis 门面设置缓存键同名,由于前缀不同,所以对应着不同字符串键值对。

2.5K10

需要掌握 Laravel Eloquent 搜索技术

Laravel 中可以使用 where 方法实现对给定字段和给定进行比较查询,就是这样简单。 <?...php $results = Post::where('title', 'foo')->get(); 甚至,你可以传入一个 array 到 where 方法里,对多个字段进行比较查询。...它工作原理,类似 &&(与查询) 运算符,当所有条件都为 true 时,返回结果集: <?...如果我们需要查询数据不存在 区分大小写 问题,可以执行类似下面的查询语句: <?...但是这并不是我们需要关注,我们仅需将待查询字符串传给 where 语句即可。返回结果集即会包含完全匹配数据,也会包含发音近似的数据。 总结 Laravel 我们提供了简单实用查询功能。

3.5K10

Mysql性能优化

比较可以为常量或者一个在该表前面所读取表达式。...38 g、key_len:表示mysql选择索引字段按照字节计算长度,如果健是null,则长度null。注意通过key_len可以确定mysql实际使用一个多列索引中几个字段。...这种方法也可以判断自己添加所以是否起了作用。 ?  6、使用索引查询,几种特殊情况。   索引可以提高查询速度,但并不是使用带有索引字段查询时,索引都会起到作用。下面是几种比较特殊情况。...在这些情况下,有可能使用带有索引字段查询时,索引并没有起到作用。 6.1、使用like关键字查询语句。在使用like关键字进行查询查询语句中,如果匹配字符串第一个字符"%",索引不会起作用。...一个索引可以包括16个字段。对于多列索引,只有查询条件中使用了这些字段中第1个字段时候,索引才会被使用。 ? 多列所有的第一个字段作为查询条件时候,发现索引起了作用了: ?

96031

谁还没碰过索引失效呢

假设我们要查询 name 字段前缀「林」数据,也就是 name like '林%',扫描索引过程: 首节点查询比较:林这个字拼音大小比首节点第一个索引陈字大,但是比首节点第二个索引周字小...4 查询比较:节点4第一个索引前缀符合林字,于是就读取该行数据,接着继续往右匹配,直到匹配不到前缀索引。...因为索引保存是索引字段原始不是经过函数计算后,自然就没办法走索引了。...如果把查询语句条件改成 where id = 10 - 1,这样就不是在索引字段进行表达式计算了,于是就可以走索引查询了。...因为索引保存是索引字段原始不是 id + 1 表达式计算后,所以无法走索引,只能通过把索引字段取值都取出来,然后依次进行表达式计算来进行条件判断,因此采用就是全表扫描方式。

42540

需要掌握 Laravel Eloquent 搜索技术

Laravel 中可以使用 where 方法实现对给定字段和给定进行比较查询,就是这样简单。 <?...php $results = Post::where('title', 'foo')->get(); 甚至,你可以传入一个 array 到 where 方法里,对多个字段进行比较查询。...它工作原理,类似 &&(与查询) 运算符,当所有条件都为 true 时,返回结果集: <?...如果我们需要查询数据不存在 区分大小写 问题,可以执行类似下面的查询语句: <?...但是这并不是我们需要关注,我们仅需将待查询字符串传给 where 语句即可。返回结果集即会包含完全匹配数据,也会包含发音近似的数据。 总结 Laravel 我们提供了简单实用查询功能。

4.3K20

MySQL数据库面试题(2020最新版)必知必会

1一样,m可能很大,但由于内部查询只扫描了字段id,不是整张表,所以性能要强于方式1查询,并且该查询能够解决方式2和方式3不能解决问题。...where 类似于 if 条件,根据 MySQL 表中字段读取指定数据 ? 想读取指定数据,WHERE是非常有用。...使用主键来作为 WHERE 子句条件查询是非常快速 如果给定条件在表中没有任何匹配记录,那么查询不会返回任何数据 MySQL where字符串比较是不区分大小写。...可以使用 BINARY 关键字来设定 where字符串比较区分大小写 ?...使用**INNER JOIN(也可以省略 INNER)**来连接以上两张表来读取runoob_tbl表中所有runoob_author字段在tcount_tbl表对应runoob_count字段

1.1K10

MySQL索引原理、失效情况

* from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID500,再到ID索引树搜索一次,这个过程称为回表!...Using temporary: 看到这个时候,查询需要优化了。这里,MySQL需要创建一个临时表来存储结果,这通常发生在对不同列集进行ORDER BY上,不是GROUP BY上。...ref: 这个连接类型只有在查询使用了不是惟一或主键键或者是这些类型部分(比如,利用最左边前缀)时发生。对于之前每一个行联合,全部记录都将从表中读出。...like以通配符开头('%abc...')MYSQL索引失效会变成全表扫描操作。--覆盖索引。 隐式转换索引失效:字符串不加单引号。 where条件少用or,用它来连接时索引会失效。...2)字符串列之间比较,两列应使用相同字符集。例如,utf8列与 latin1列进行比较会不使用索引。 3)字符串列与时间或数字列进行比较时,在没有转换情况下,不使用索引。

1.1K11

Explain详解与索引最佳实践

不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询结果放入临时表中) 使用表 DROP TABLE IF EXISTS `actor`; CREATE TABLE `actor...ref:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引部分前缀,索引要和某个比较,可能会找到多个符合条件行。 1....Using where Using index:查询列被索引覆盖,并且where筛选条件是索引列之一但是不是索引前导列,意味着无法直接通过索引查找来查询到符合条件数据 mysql> explain...NULL:查询列未被索引覆盖,并且where筛选条件是索引前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过“回表”来实现,不是纯粹地用到了索引,也不是完全没用到索引 mysql>explain...Using filesort:mysql 会对结果使用一个外部索引排序,不是按索引次序从表里读取行。

77820

Laravel拼装SQL子查询最佳实现

比如查询一个product表,要求查询条件中,product_catagory 表某些字段存在才能才回。 写多了容易无解,直接上SQL: ?...对Laravel来说,简直不要太简单,你只要在写whereIn时候,数组使用闭包返回就可以了。...不止一个方法 解决问题方法永远不止一个,在Laravel中你还可以不像上一节那样,虽然很明确,写很标准,可是并不是所有开发者都能达到那样熟练度。 我们说说通用,一般开发者所能想到一些方法。...->where('active', 1); }) ->get(); 这样使用 DB::raw,还有 whereRaw 方法,你几乎就是在写原生SQL语句了。比较直观。...写在最后 本文通过一个SQL语句查询Laravel实现方式,解释了laravel在拼装SQL查询自由度,使用起来非常灵活。

3.7K10
领券