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

3分钟短文 | Laravel复杂SQL超多WHERE子句,本地作用你没用过

学习时间 比如对于业务逻辑,User模型筛选查询的时候有非常多的限制条件,类似下面这样的: ? 这一堆令人头皮发麻的where,还不算变态。...更厉害的是加上多表联合查询,那就真的是 sql 的噩梦了。然而对于laravel而言,这些全过程都可以拼装,你只需要关注筛选操作,剩下的组装sql的过程,laravel都帮你做好了。...就拿这个 model 的查询说起,你可以 "查询作用”这么个时髦的功能,有效分散重用查询条件。 拿“全局作用”来说,它可以给模型的查询都添加上约束。...Laravel 的软删除功能就是利用此特性从数据库获取 “未删除”的模型。 你可以编写你自己的全局作用,很简单、方便的为每个模型查询都加上约束条件。看官方给出的示例: ?...就是在对应的 Eloquent 模型方法前添加 scope 前缀,模型构造如下的作用方法: ?

2.7K10

Laravel5.7 Eloquent ORM快速入门详解

时间戳 默认情况下,Eloquent 期望 created_at updated_at 已经存在于数据表,如果你不想要这些 Laravel 自动管理的数据列,模型类设置 $timestamps...当然,这两个属性你只能同时使用其中一个而不能一起使用,因为它们是互斥的。下面的例子,除了 price 之外的所有属性都是可以赋值的: <?...Laravel 自带的软删除功能就使用了全局作用来从数据库拉出所有没有被删除的模型。编写自定义的全局作用可以提供一种方便的、简单的方式来确保给定模型的每个查询都有特定的条件约束。...例如,你可能经常需要获取最受欢迎的用户,要定义这样的一个作用,只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀。 作用总是返回查询构建器实例: <?...事件允许你一个指定模型类每次保存或更新的时候执行代码。 retrieved 事件会在从数据库获取已存在模型时触发。当一个新模型被首次保存的时候,creating created 事件会被触发。

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

Laravel学习记录--Model

默认添加数据库时,会 增加两个字段 create_at ,update_at 如不需要这两个字段,除迁移文件删除之外 还需model类设置属性 public $timestamps = false...Laravel 自带的 软删除功能 就利用全局作用从数据库中提取「未删除」的模型。编写自定义的全局作用可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...LaravelEloquent还支持动态作用,动态作用指在查询过程动态设置预置过滤器的查询条件,动态作用与本地作用类似,都是以scope作为前缀,调用方法也相同,不同的是动态作用可以通过额外参数指定查询条件...','>',$price) } 查询时直接调用 $goods = Good::Price(200)->get(); 全局作用可理解为限制约束,本地作用/动态作用则可理解为一些定义好的常用约束集合...7次循环 该循环先执行1次查询获取表的所有的文章,然后另一个查询获取每一篇文章的作者,因此如果有6个作者,则会执行7次查询,1次是获取文章,剩下的6次获取文章作者。

13.4K20

Laravel 7发行说明

引入 Laravel 框架或其组件时,应始终使用版本约束, ^7.0,因为 Laravel 的主要版本确实包含非兼容性更改。我们会努力确保您可以一天或更短的时间内更新到最新版本。..., 第一方 CORS 支持, 路由模型绑定作用改进, 存根自定义, 数据库队列改进, 多邮箱驱动, 查询时间强制转换(casts),新的 artisan test 命令,以及各种其他错误修复可用性改进...这些令牌可以被授予能力/作用,用于指定允许令牌执行哪些动作。 有关 Laravel Sanctum 的更多信息, 请查看 Sanctum 文档。...有时候需要在查询执行过程对特定属性进行类型转换,例如需要从数据库表获取数据的时候。...假如我们执行查询时进行 date 类型转换将更方便。

9K20

Laravel Eloquent 模型类中使用作用进行查询

问题引出 通过 Eloquent 模型实现增删改查这篇教程,我们已经学习了如何在 Eloquent 模型类中进行各种查询,但是这些查询大多需要手动调用查询构建器提供的各种方法来实现。...接下来,我们就来演示如何在 Eloquent 模型类上使用「作用」进行查询。...「局部作用」的实现也比较简单,需要应用它的模型类定义一个过滤器方法即可。...动态作用 此外,Eloquent 模型类还支持「动态作用」,所谓动态作用指的是查询过程动态设置预置过滤器的查询条件,动态作用和局部作用类似,过滤器方法名同样以 scope 开头,只不过可以通过额外参数指定查询条件...`deleted_at` is null 动态作用的调用移除方式和局部作用一样。 本系列教程首发在Laravel学院(laravelacademy.org)

2.5K20

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

对于写操作还有更为重要的一个方法, 就是数据的删除。删除数据,有物理删除软删除的区别。 ? 我们从软删除的使用,再顺便说一说模型内的作用的概念。...代码时间 常规的删除操作分两步进行,一步是把数据从数据库查询出来,使用laravel模型的方法, 则返回的是一个模型对象。第二步,调用模型对象的delete方法。...所以引入了软删除的概念,就是表内添加一个字段,用于标记,这一行条目是否算是删除状态。laravel, 这个软删除字段默认是 deleted_at。你也可以模型手动指定。...既然说到了模型作用,我们不妨延伸一下,说说这个设计点,以及适用的场景。 比如说有一个查询条件代码内到处都要用,有没有简写方法,写一次其他地方可以随意调用呢?这就是本地作用的方法了。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用全局作用的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

1.3K30

3分钟短文:Laravel slug,让你的url地址更“好记”

[img] 本文就来讲讲,如何在laravel构造友好的url路由。 啥是slug?...class Event extends Model { use Sluggable, SluggableScopeHelpers; } 从名字你就能猜测的到,SluggableScopeHelpers 是一个全局作用文件...完成引入后,使用模型进行查询时,就可以这样使用了: $event = Event::findBySlug('laravel-hacking-and-coffee'); $event = Event::...findBySlugOrFail('laravel-hacking-and-coffee'); 归根结底,就是使用slug字段记录查询的字符串,而slug字段在对应关系定义为 source => ‘name...写在最后 本文介绍了模型文件内,引入slug的功能,并通过修改模型的查询方式,让模型的默认查询方式修改为通过字符串进行查询,从而可以路由文件内构造更友好的查询url。

3.5K11

通过 Laravel Eloquent 模型实现简单增删改查操作

默认约定每张表都有 created_at updated_at 字段(迁移类 table->timestamps() 会生成这两个字段),并且保存模型类时会自动维护这两个字段。...$post->views); } } }); 除此之外 Eloquent 模型还可以通过 cursor 方法每次只获取一条查询结果,从而最大限度减少内存消耗: foreach...注:除获取单条记录之外ELoquent 模型类查询返回的结果都是集合类,因此你可以查询结果上调用集合类的所有方法,还可以自定义模型对应集合类,详情请查看对应官方文档。...执行上面的代码就会在数据库新增一条记录(我们 Tinker 执行上述代码): ? 我们先要创建一个新的 Post 模型实例,然后依次设置需要设置的字段,最后调用 save 方法保存即可。...的应用,最后还给大家演示了如何通过 Eloquent 实现数据库的增删改查,当然,Eloquent 的功能远不仅如此,还支持很多强大的功能,比如批量赋值、软删除、查询作用设置、模型事件、关联关系等

7.9K20

3分钟短文:Laravel模型作用,为你“节省”更多代码

全局作用 假设有些数据库查询操作,无论是控制器内,或者模板文件内,或者命令行方法内,都有重复的使用需求,要是模型内有一个公用的方法,默认就加上这些筛选条件,就可以显著减少代码量了。...events WHERE `published` = 1; 如果条件 published = 1 默认的情况下需要开启,我们可以使用laravel模型的 全局作用 方式为所有查询追加上这个条件。...模型文件 Event 内头部引入下述类: use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Builder...既然本地作用返回的是 QueryBuilder 实例,那么自然就可以链式调用本地作用的方法, QueryBuilder 的方法。...讲述了两个方法: 全局作用:全局起作用,需要手动移除; 本地作用:只有手动调用起作用,可链式使用; 这样的设计模式可以很大程度上节约查询代码,但是对于维护,需要同等熟悉的开发者彼此遵循开发规范,写出可维护的代码

1.4K22

基于独立的 Laravel Eloquent 组件编写 ORM 模型类

两者的主要区别是: Active Record 模式,模型类与数据表一一对应,一个模型实例对应一行数据表记录,操作模型实例等同于操作表记录; 而在 Data Mapper 模式,业务领域(Domain...这里,我们选择使用更加简单的 Active Record 模式来实现 ORM 模型类,并且为了简化流程,我们直接基于 Laravel 框架的 Eloquent ORM 组件来编写,就不再重复造轮子了。...下载 Eloquent ORM 相关扩展包 Eloquent ORM 作为 Laravel 框架自带的 ORM 实现,还可以 Laravel 框架之外作为独立的 ORM 组件使用。...$album = $post['album']; ... } } 这里的模型类方法关联查询都可以 Eloquent 官方文档查询到,这里不详细介绍了,需要注意的是,我们之前视图模板中都是通过关联数组获取数据库查询结果...MVC 模式博客应用的落地,下篇教程,我们将探索如何通过现代工程化的方式管理前端资源依赖,我们将引入 NPM、Webpack、Laravel Mix、jQuery Bootstrap,并基于这些工具框架替换博客应用主题

1.9K10

3分钟短文:Laravel说要用软删除,可不要真删

真实的SQL如下: DELETE FROM events WHERE id = 12; laravel提供了许多语法糖,上面使用 find delete 两个步骤,可以缩减为一个方法 destroy...Laravel本身支持软删除,只需要进行少量的配置更改,以确保执行delete或destroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...其实原理很简单,就是为模型追加一个全局作用,为每个查询子句追加上如下筛选条件: WHERE deleted_at IS NULL laravel已经为我们写好这部分逻辑了,模型内引入如下trait:...任何设置deleted_at为日期时间值的记录,都不会包含在任何查询结果,因此看起来已经被删除了。...如果你代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写: $events = Event::withTrashed()->get(); 写在最后 本文我们有重温了laravel的模型软删除功能

2.1K00

跟我一起学Laravel-EloquentORM高级部分

查询作用 全局作用 全局作用允许你对给定模型的所有查询添加约束。使用全局作用功能可以为模型的所有操作增加约束。...软删除功能实际上就是利用了全局作用功能 实现一个全局作用功能只需要定义一个实现Illuminate\Database\Eloquent\Scope接口的类,该接口只有一个方法apply,该方法增加查询需要的约束...本地作用只对部分查询添加约束,需要手动指定是否添加约束,模型添加约束方法,使用前缀scope <?...,使用下列方法,现在模型增加一个get方法 <?...Mutators Eloquent模型,AccessorMutator可以用来对模型的属性进行处理,比如我们希望存储到表的密码字段要经过加密才行,我们可以使用Laravel的加密工具自动的对它进行加密

1.2K40

竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。(2)模型工厂类

之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。” 纳尼,什么意思嘛?别忘了PHP是最好的语言!...模型类目录 由于压倒性的社区需求,现在默认的 Laravel 框架包含一个 app/Models 目录。我们希望你喜欢 Eloquent 的新家!...Eloquent 模型工厂 已完全重写为基于类的工厂,并有完美的关联支持。例如 Laravel 的 UserFactory 是这样写的: <?...除此之外,你也可以给你的 Eloquent 模型工厂添加任意你需要的工具类。...现在假定我们的 User 模型有一个 posts 关联方法,我们只需要执行下面的代码就可以生成一个有 3 篇文章的用户。

2.7K41

3分钟短文:Laravel 使用DB门面操作原生SQL

引言 我们推荐使用laraveleloquent orm 模型操作数据库表, 因为特性更为丰富,组装更为灵活,在编程层面操作数据的来来去去非常直观。...学习时间 系统提供了DB门面用于原生的SQL操作,程序内引入下面的类: use Illuminate\Support\Facades\DB; 该类的定义很简单,标准的门面注册方法: class DB...DB门面既可以使用query builder的链式操作,也可以用于执行原生查询。举几个例子。..., [1]); 或者使用链式操作,获取所有满足条件的记录: $users = DB::table('users')->get(); 当然了,还有经常用到的多表联合查询,复杂的查询过滤条件: DB::table..., [1]); 写在最后 本文通过对laravel DB门面的增删改查用法,向大家展示了基本的参数绑定的用法。

2K20

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

对于 Laravel 中标准的 Eloquent 模型类来说,每个表都应该有两个字段,一个是 updated_at ,另一个是 created_at ,分别是两个时间戳字段,用于记录数据的创建时间修改时间...注意,这里也可以使用 save() 方法的,它的作用是即可以用于新增也可以用于保存, 查询构造器 没有这个方法,但是有一个类似的 updateOrInsert() 方法,大家可以自己试试。...但其实在 Model 的底层,肯定也是有一个 DatabaseManager 对应的 Connector 作用。这个我们后面分析源码的时候再说。...这样做的原因也正是为了保持数据的一致性完整性。 当然, Laravel ,可以不在数据库层面进行严格的设置,就可以框架代码实现主外键的关联。...然后来到最后的 tap() ,tap() 是一个 Laravel 框架定义的全局函数, env() 函数在一起的,它的作用是将第一个参数当作第二个参数的参数传递给第二参数,并执行第二个参数后,将第一个参数再返回回来

8.8K20

需要掌握的 Laravel Eloquent 搜索技术

本文将带领大家学习 MySQL Eloquent 搜索模块设计的相关技术。 基本的 Eloquent Where 查询 作为首个要讲解的搜索功能,我们先不涉及新知识点。... Laravel 可以使用 where 方法实现对给定字段给定值进行比较查询,就是这样简单。 <?...Laravel 也可以轻松执行对 JSON 数据的查询,这得益于 Laravel 良好的 JSON 支持。 不过深入研究之前需要注意的一点是:谨记 JSON 列的存储是 区分大小写 的。...版本,可以查看 Laravel changelog 执行 sound like 操作,会进行一个发音相似性的算法,然后获取结果集。...我们可以 Laravel 里使用 where 语句,可以使用原生 SQL 语句,甚至可以使用模糊查询相似查询,所有这些查询功能都是 Laravel 内置提供的开箱即用,非常赞!

3.5K10

Laravel 模型关联基础教程详解

Laravel 定义模型关联是每个 Laravel 开发者可能已经做过不止一次的事情。但是试图实现关联时可能会遇到各种问题。因为 Laravel 有各种各样的关联,你应该选择一个?...举个例子,一个 User 模型一个 Passport 模型会成为一对一的关联。一个用户只能拥有一张通行证,同样,一张通行证也只属于一个用户。 让我们看看如何在代码定义这种关联。 <?...我们通过 hasOne 方法告诉 Laravel User 模型有一个 Passport 。 注意: 所有用于定义关联的方法都有可选的额外参数,你可以在这些参数定义本地键外键。...用户可以拥有多个账单,但账单仅属于一个用户。 代码是这样写的: <?...查询关联 查询一个关联非常简单。因为我们定义了 Passport 的一对一关联 Invoice 的一对多关联,所以我们可以 User 模型中使用它们。

5.5K31

竟然有人质疑我还在用Laravel开发?别忘了PHP是最好的语言。

之前写了一篇Laravel提高DB查询效率的文章,转发到群里后竟然有人质疑我说“Laravel是他好几年前用的框架,没想到现在还有人在用。” 纳尼,什么意思嘛?别忘了PHP是最好的语言!...模型类目录 由于压倒性的社区需求,现在默认的 Laravel 框架包含一个 app/Models 目录。我们希望你喜欢 Eloquent 的新家!...Eloquent 模型工厂 已完全重写为基于类的工厂,并有完美的关联支持。例如 Laravel 的 UserFactory 是这样写的: <?...除此之外,你也可以给你的 Eloquent 模型工厂添加任意你需要的工具类。...现在假定我们的 User 模型有一个 posts 关联方法,我们只需要执行下面的代码就可以生成一个有 3 篇文章的用户。

2.4K60

Laravel源码解析之Database

我们学习使用一个开发框架时,无论使用什么框架,如何连接数据库、对数据库进行增删改查都是学习的重点,Laravel我们可以通过两种方式与数据库进行交互: DB, DB是与PHP底层的 PDO直接进行交互的...,通过查询构建器提供了一个方便的接口来创建及运行数据库查询语句。...上面说的这两个部分都包括了 Illuminate/Database包里面,除了作为Laravel的数据库层 Illuminate/Database还是一个PHP数据库工具集, 在任何项目里你都可以通过... Eloquent 服务启动之前为了保险起见需要清理掉已经booted的Model全局查询作用 /** * Clear the list of booted models so they will...讲服务容器绑定时就说过了依赖注入的其中一个作用是延迟初始化对象,所以只要在用到数据库连接实例时它们才会被创建。

1.3K30
领券