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

laravel框架操作sql时使用Scope作用域

应用场景 某些SQL语句需要加某些共同的条件,例如status > 0,如果我们每条SQL语句都加的话显然是很麻烦的,作为一个优雅的框架,当然有相应的解决办法 编写作用域 Laravel 应用默认并没有为作用域预定义文件夹...,所以你可以按照自己的喜好在 app 目录下创建 Scopes目录并实现接口(Illuminate\Database\Eloquent\Scope)的方法apply。...查询则会生成如下 SQL 语句:status>0 就是应用的效果 select * from `users` where `status` > 0 当然,假如你感觉到上面的方法比较麻,也可以使用匿名的全局作用域...移除指定作用域 ScopeTest::withoutGlobalScope('status')->get(); //移除闭包定义的作用域...前缀来使用作用域 <?

83110

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

全局作用域 所谓「全局作用域」,指的是预置过滤器在注册该「全局作用域」的模型类的所有查询中生效,不需要指定任何额外条件。...通过匿名函数实现 如果你觉得编写一个「全局作用域」类很麻烦,过滤逻辑又很简单,还可以在模型类的 boot 方法中通过匿名函数实现全局作用域: protected static function boot...,不同场景需要不同的预置过滤器,这个时候就不能使用「全局作用域」了,要改用「局部作用域」,在不同场景应用不同的局部作用域来完成查询功能。...$query->where('type', $type); } 这样,在查询指定类型的文章时,就可以这么实现: $posts = Post::active()->ofType(Post::Article...`deleted_at` is null 动态作用域的调用和移除方式和局部作用域一样。 本系列教程首发在Laravel学院(laravelacademy.org)

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

    Laravel 7 新特性-路由的趟坑之路(自定义键名以及作用域)

    Laravel 7 开始新增了一些新特性,今天我们来讲解下 路由绑定的新用法,自定义键名(slug)以及作用域(范围限定) 首先我们 安装最新版本的 Laravel ,并且创建两张数据表。...安装 Laravel 7 composer create-project --prefer-dist laravel/laravel blog 生成用户认证脚手架 composer require laravel...当然我们在以前的版本可以更改这个,我们需要在 模型中重写一个方法 getRouteKeyName 接下来我们看下 Laravel 7 以前是怎么实现的 首先。...Route::get('posts/{post:slug}', function (\App\Post $post) { dd($post); }); 作用域(访问限制) 怎么理解呢?...转载无需与我联系,但须注明出处,注明文章来源 Laravel 7 新特性-路由的趟坑之路(自定义键名以及作用域) 联系我 hedeqiang.png

    2.5K10

    如何验证Rust中的字符串变量在超出作用域时自动释放内存?

    讲动人的故事,写懂人的代码在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。...Rust 自动管理标准库中数据类型(如 Box、Vec、String)的堆内存,并在这些类型的变量离开作用域时自动释放内存,即使程序员未显式编写清理堆内存的代码。...席双嘉提出问题:“我对Rust中的字符串变量在超出作用域时自动释放内存的机制非常感兴趣。但如何能够通过代码实例来验证这一点呢?”贾克强说这是一个好问题,可以作为今天的作业。...= Jemalloc;fn main() { { // 进入一个新的作用域,作用域是用大括号 `{}` 包围的代码块 // 创建一个包含 100M 大字符串的自定义结构体...("Large string created."); } // 这里作用域结束,`large_string_owner` 变量自动销毁,`drop` 函数被调用 // 打印离开作用域后的消息

    27721

    【半译】在ASP.NET Core中创建内部使用作用域服务的Quartz.NET宿主服务

    作业可以直接使用作用域服务 由于作业实例是从IServiceProvder作用域中解析来的,因此您可以在作业实现的构造函数中安全地使用作用域服务。...可替代解决方案 我喜欢本文中显示的方法(使用中间QuartzJobRunner类),主要有两个原因: 您的其他IJob实现不需要任何有关创建作用域的基础结构的知识,只需完成标准构造函数注入即可 在IJobFactory...该QuartzJobRunner通过创建和处理作用域隐式地处理这个问题。 但是,此处显示的方法并不是在工作中使用范围服务的唯一方法。...总结 在本文中,我展示了如何创建中间层IJob,该中间层QuartzJobRunner在调度程序需要执行作业时创建。...该运行程序负责创建一个DI范围,实例化请求的作业并执行它,因此最终IJob实现可以在其构造函数中使用作用域中的服务。

    1.9K10

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

    我们从软删除的使用,再顺便说一说模型内的作用域的概念。 代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。...如果是想软删除条目那样,默认把所有的查询都追加 自定义的查询条件,就需要我们上面说的全局作用域了。...声明一个全局作用域很简单,只需在模型文件内添加如下代码: class Contact extends Model{ protected static function boot() {...如果你的全局作用域写的逻辑会有点多喝复杂,可以将其独立出来,写成类,以便调用。...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。

    1.4K30

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

    就拿这个 model 的查询说起,你可以 "查询作用域”这么个时髦的功能,有效分散和重用查询条件。 拿“全局作用域”来说,它可以给模型的查询都添加上约束。...Laravel 的软删除功能就是利用此特性从数据库中获取 “未删除”的模型。 你可以编写你自己的全局作用域,很简单、方便的为每个模型查询都加上约束条件。看官方给出的示例: ?...要将全局作用域分配给模型,需要重写模型的 booted 方法并使用 addGlobalScope 方法: ?...SQL 学习了全局作用域,那么本地作用域就更好理解了。...就是在对应的 Eloquent 模型方法前添加 scope 前缀,在模型中构造如下的作用域方法: ?

    2.8K10

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

    全局作用域 假设有些数据库查询操作,无论是在控制器内,或者在模板文件内,或者命令行方法内,都有重复的使用需求,要是在模型内有一个公用的方法,默认就加上这些筛选条件,就可以显著减少代码量了。...,我们可以使用laravel模型的 全局作用域 方式为所有查询追加上这个条件。...本地作用域 接上一节的 withoutGlobalScope 要每次手动屏蔽的方式不同,有时候使用有局限的作用域更能解决问题。...而声明一个本地作用域,只要遵循laravel的语法规定即可,如下示例: public function scopePublished($query) { return $query->where('published...讲述了两个方法: 全局作用域:全局起作用,需要手动移除; 本地作用域:只有手动调用起作用,可链式使用; 这样的设计模式可以很大程度上节约查询代码,但是对于维护,需要同等熟悉的开发者彼此遵循开发规范,写出可维护的代码

    1.4K22

    在RHEL7或CentOS7中修改创建账号时系统默认UID、GID最小起始值及其他设置

    大家应该都知道,在Linux系统中,1000以下的UID是系统保留的UID。随意修改系统上某些帐号的 UID 很可能会导致某些程序无法进行,甚至导致系统无法顺利运行。...var/lib/nfs /sbin/nologin nfs-utils # Note: nfsnobody is 4294967294 on 64-bit platforms (-2) 在未来...现在在RHEL7官方文档中,已经推荐使用5000作为新建账户的最小UID值,怎么样来修改创建账号是最小UID,GID起始值及一些其他设置呢?...通过查看/etc/login.defs文件我们会发现,关于创建账号时的一些默认选项都会在这个文件内有设置。...the user to be removed (passed as the first argument). # #USERDEL_CMD /usr/sbin/userdel_local #是否创建用户目录

    3.4K10

    还不知道PHP有闭包?那你真OUT了

    这一点和普通函数不一样,因为闭包有着严格的作用域问题。对于全局变量来说,我们可以使用use,也可以使用global。但是对于局部变量(函数中的变量)时,只能使用use。这一点我们后面再说。...关于全局作用域,闭包函数和普通函数的区别不大,主要的区别体现在use作为桥梁进行变量传递时的状态。...闭包的父作用域是定义该闭包的函数(不一定是调用它的函数)。静态闭包函数无法获得$this。 全局变量依然可以使用global获得。...而当我们需要的时候,从服务容器中拿出来的时候才利用闭包真正的去创建对象。同理,事件的回调也是一样的概念。事件发生时在我们需要处理的时候才去执行回调里面的代码。...这样对于程序来说很多用不上的对象就都被创建了,带来非常大的资源浪费。 基于闭包的这种强大能力,现在闭包函数已经在Laravel、TP6等框架中无处不在了。

    49620

    【译】20个 Laravel Eloquent 小技巧(下)

    继续介绍 Laravel Eloquent 的小技巧 11....全局范围(global scope)内的默认排序 如果你希望User :: all()始终按名称字段排序,该怎么办? 你可以分配全局的查询作用域。 让我们回到上面已经提到的boot()方法。...order', function (Builder $builder) { $builder->orderBy('name', 'asc'); }); } 这里还有更多关于请求范围作用域的介绍...在保存的时候重写 update_at 字段 你知道 - > save()方法是可以接受参数的吗? 因此,我们可以告诉它“忽略” updated_at默认填充当前时间戳的功能。...Laravel 默认会给所有实体类配置时间戳,如果不需要一般是在模型中指定 $timestamps = false 18. update()方法的返回值是什么?

    2.8K10

    C++核心准则ES.56​:只在需要将一个对象显式移动到另外的作用域时使用std::move​

    ES.56: Write std::move() only when you need to explicitly move an object to another scope ES.56:只在需要将一个对象显式移动到另外的作用域时使用...通常情况下,遵循本文档中的准则(包括不要不必要地扩大变量作用域,编写带返回值的简短函数,返回局部变量等)可以帮助消除显式执行std::move的大部分需求。...在显式移动一个对象到另外的作用域时,显式移动是有必要的。...特别是: 1.将对象传递给一个“下沉”函数时(接管变量所有权的函数,译者注) 2.实现对象自身移动操作(移动构造函数,移动赋值运算符)和交换操作时 Example, bad(反面示例) void sink...而且在移动之后,应该认为对象已经被移走(参见C.64)并且在赋予新值之前不要获取对象的状态。

    95220

    当我们讨论swoole的时候,我们在讨论什么?

    laravel框架的特点,每次请求过来需要加载大量的文件,像路由文件还需要编译成为正则表达式进行处理,而且只支持控制器路由缓存,不支持路由缓存,在实际的开启路由缓存也会带来别的问题,增加维护的成本。...win上现有折中的方案:win7可以用cygwin,win10可以用linux子系统。 Debug定位问题难度上升。...新初始化的 *gorm.DB 或调用 新建会话方法 后,GORM 会创建新的  Statement 实例。..., 28).Find(&users) Tips 安装swoole时,会有扩展冲突,所以某些扩展不能开。 全局变量协程切换的前后不能保证全局变量以及 static 变量的一致性。...无法通过_GET/_POST/_REQUEST/_SESSION/_COOKIE/_SERVER 等 协程内部禁止使用全局变量。 协程使用 use 关键字引入外部变量到当前作用域禁止使用引用。

    5.9K40

    Laravel学习记录--Model

    查询全局作用域 app\Scope 全局范围能为给定模型的所有查询添加约束。...Laravel 自带的 软删除功能 就利用全局作用域从数据库中提取「未删除」的模型。编写自定义的全局作用域可以提供一个方便、简单的方法来确保给定模型的每个查询都受到一定的约束。...删除全局作用域 删除一个全局作用域 User::withoutGlobalScope(AgeScope::class)->get(); 删除多个全局作用域 如果你想要删除几个甚至全部的全局作用域,可以使用...Laravel中Eloquent还支持动态作用域,动态作用域指在查询过程中动态设置预置过滤器的查询条件,动态作用域与本地作用域类似,都是以scope作为前缀,调用方法也相同,不同的是动态作用域可以通过额外参数指定查询条件...','>',$price) } 在查询时直接调用 $goods = Good::Price(200)->get(); 全局作用域可理解为限制约束,本地作用域/动态作用域则可理解为一些定义好的常用约束集合

    13.6K20

    深入理解 JavaScript 中的作用域和上下文

    02JavaScript中的作用域 在JavaScript中有两种类型的作用域: 全局作用域 局部作用域(也叫本地作用域) 定义在函数内部的变量具有局部作用域,而定义在函数外部的变量具有全局范围内。...每个函数在被调用时都会创建一个新的作用域。 全局作用域 当您开始在文档中编写JavaScript时,您已经在全局作用域中了。全局作用域贯穿整个javascript文档。...如果变量在函数之外定义,则变量处于全局作用域内。 // 默认全局作用域 var name = 'Hammad'; 在全局作用域内的变量可以在任何其他作用域内访问和修改。...其余的任务在执行期上下文中排队。正如我刚才所说,当 JavaScript 解释器开始执行代码时,上下文(作用域)默认设置为全局。...06闭包( Closures) 闭包的概念与我们在上面讲的词法作用域密切相关。 当内部函数尝试访问其外部函数的作用域链,即在直接词法作用域之外的变量时,会创建一个闭包。

    1.3K10

    Javascript中作用域的理解?

    当你继续在阅读这篇文章时,你将会意识到你的代码的scope有助于提高效率,跟踪Bug。当变量具有相同的名称但在不同的作用域时,作用域也解决了命名问题。...当调用时,每个函数都创建一个新的作用域。 全局作用域 当你在document中开始写JavaScript时,你已经就在全局作用域内了。...在整个JavaScript的document中,只有一个全局作用域。如果变量在函数之外定义,则在全局作用域内。...其余的任务在执行期上下文中排队。正如我刚才所说,当 JavaScript 解释器开始执行代码时,上下文(作用域)默认设置为全局。...'variableObject': { // 包含函数参数,内部变量和函数声明 } 作用域链 在执行期上下文的创建阶段,作用域链是在变量对象之后创建的。作用域链本身包含变量对象。

    91330

    Laravel--CORS 扩展包完美解决前后端分离应用跨域请求

    sharing,跨域资源共享),何况在 Laravel 生态中已经有了 laravel-cors 这样强大的扩展包,拿来即用,只需要配置一个中间件即可上手,非常方便。...本片文章讲解两种跨域方式 1. laravel-cors 安装 在项目根目录下通过 Composer 安装扩展包: composer require barryvdh/laravel-cors 1...Laravel 5.5 及以上版本支持自动包发现,无需注册服务提供者,Laravel 5.4 及以下版本需要手动在 config/app.php 中注册服务提供者: Barryvdh\Cors\ServiceProvider...::class, 1 使用 如果想要全局支持跨域请求,可以在 app/Http/Kernel.php 的 $middleware 数组中添加 HandleCors 中间件: protected $...\Barryvdh\Cors\HandleCors::class,     ], ]; 1 2 3 4 5 6 7 8 9 laravel 官网文档地址:https://laravelacademy.org

    2.1K20

    四句话总结JavaScript作用域

    前言:JavaScript的作用域一直以来都是前端开发中比较难以理解的知识点,JavaScript6中新引入了 let 关键字,用于指定变量属于块级作用域,本次先忽略这个点。...第一句话:JavaScript以函数作为作用域(忽略let)   很多语言如c#,java都是以代码块作为作用域即大括号也是一个作用域,JavaScript却是以函数作为作用域,如果你对python比较了解...第二句话:JavaScript函数的作用域在函数未被调用之前,已经创建   在JavaScript中如果不创建(声明)变量,直接去使用,则报错: 1 console.log(x); 2 VM199:1...return inner; 8 } 9 var res = func(); 10 res(); 结果:eric 上述代码,在函数被调用之前作用域链已经存在: 全局作用域 -> func函数作用域 -...> inner函数作用域 当执行【ret();】时,由于其代指的是inner函数,此函数的作用域链在执行之前已经被定义为:全局作用域 -> Func函数作用域 -> inner函数作用域,所以,在执行【

    44520

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

    Laravel本身支持软删除,只需要进行少量的配置更改,以确保在执行delete或destroy时,模型的记录不会被实际删除。作为一个例子,我们修改Event模型以支持软删除。...其实原理很简单,就是为模型追加一个全局作用域,为每个查询子句追加上如下筛选条件: WHERE deleted_at IS NULL laravel已经为我们写好这部分逻辑了,在模型内引入如下trait:...; protected $dates = ['created_at','deleted_at','started_at','updated_at']; } 保存这些更改之后,下次删除与此模型关联的记录时,...如果你在代码内要坚持查询全量数据,也包含软删除了的数据,那么代码这样写: $events = Event::withTrashed()->get(); 写在最后 本文我们有重温了laravel的模型软删除功能...,通过创建迁移文件,修改数据库表,追加软删除字段。

    2.2K00
    领券