首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel动态范围只在第一次工作

Laravel动态范围只在第一次工作
EN

Stack Overflow用户
提问于 2017-12-04 03:24:45
回答 1查看 2K关注 0票数 0

我错过了在Laravel5.5中全球范围是如何工作的。

在我的控制器index中,我将过滤器传递到一个getter中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function index(SaleFilters $filters)
{
    return new SaleCollection($this->getSales($filters));
}

getSales

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected function getSales(SaleFilters $filters)
{
    $sales = Sale::with('office')->filter($filters);

    return $sales->paginate(50);
}

protected function range($range)
{
    $dates = explode(" ", $range);
    if (count($dates) == 2) {
        $this->builder = Sale::with(['office', 'staff']) 
            ->where('sale_date', '>=', $dates[0])
            ->where('sale_date', '<', $dates[1])
            ->orderBy('sale_date', 'desc');

        return $this->builder;
    }
    return false;
}

我在sale模型中有一个作用域设置,我认为它会自动应用到上面的过滤器中?如果没有,是否必须重新应用相同的作用域,在筛选器中复制作用域代码?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected static function boot() 
{
    parent::boot();

    $user = Auth::user();
    if (($user) && ($user['office_id'])) {
        return Sale::ofOffice($user['office_id'])->get();
    } 
}

public function scopeOfOffice($query, $office) 
{
    return $query->where('office_id', $office);
}

因此,基本上,如果用户应用了office_id,它应该应用ofOffice作用域,因此它应该只返回应用于该office_id的销售。

基本上,它通过axios请求在页面加载上工作。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::get('/sales', 'SalesController@index')->middleware('auth:api');

axios
    .get('api/sales/?range=" + this.rangeFilter)

rangeFilter基本上是传递给上述筛选器查询的开始和结束日期。

有人能解释一下范围是如何工作的吗?或者,如果有什么明显的事情,为什么它不总是工作的?正如我说过的,它在页面加载中工作,我为rangeFilter提供了默认值,但是当我更改那些日子,并且它通过相同的axios调用重新获取时,它似乎没有应用这个范围,我得到了所有的结果,而不是where office_id = 'x'

就我而言,上面的范围筛选器也会在第一个页面加载时执行,所以不确定为什么会在那里应用,而不是以后。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-04 04:19:57

不应将动态作用域的使用与全局范围的使用混为一谈。此外,静态boot函数不期望返回。为了使用动态范围,每次需要时都需要调用它。因此,名称是动态的。默认情况下,并不总是执行应用的查询。在那里如此,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected function getSales(SaleFilters $filters)
{
    $sales = Sale::ofOffice($anyOfficeHere)->with('office')->filter($filters);

    return $sales->paginate(50);
}

为了适应现有代码,您可能需要在模型中添加一个if语句。然后在没有参数的情况下调用作用域函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function scopeOfOffice($q) 
{
    if (($user = \Auth::user()) && ($office = $user->office_id)) {
       $q->where('office_id', $office);
    }
}

// Your controller
protected function getSales(SaleFilters $filters)
{
    $sales = Sale::ofOffice()->with('office')->filter($filters);

    return $sales->paginate(50);
}

如果您觉得重复输入ofOffice非常麻烦的话。全球范围是可行的。在您的模型静态boot函数中,如果您感到在应用程序中创建了一个独立的类,您也可以应用匿名函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected static function boot()
{
    parent::boot();

    static::addGlobalScope('officeOrWhatNot', function ($q) {
        if (($user = \Auth::user()) && ($office = $user->office_id)) {
            $q->where('office_id', $office);
        }
    });
}

// Your controller. No more `ofOffice`, it's automatically applied.
protected function getSales(SaleFilters $filters)
{
    $sales = Sale::with('office')->filter($filters);

    return $sales->paginate(50);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47632272

复制
相关文章
await 只在 async 函数中工作
关于 promise 的一种更优雅的写法 async/await 中,await 只会出现在 async 函数中,我们使用 async/await 时,几乎不需要 .then,因为 await 为我们处理等待;但是在代码的顶层,当我们在 async 函数的外部时,我们在语法上是不能使用 await 的,所以通常添加 .then/catch 去处理最终结果或者 error。
前端开发博客
2020/11/04
1.5K0
await 只在 async 函数中工作
ISP基础(08)-动态范围压缩
自然界中真实场景能够表现比较广泛的颜色亮度区间,比如从很暗(10^-5 cd/m2)的黑夜到明亮(10^5 cd/m2)的太阳光,有将近10个数量级的动态方位。而传统显示设备所能显示的场景、视频和图像通常受限于硬件设备,通常只能表达出很小一部分的亮度范围,比如如常见的8比特图像显示0到255的整数范围,因此为了能够显示高动态范围的影响,需要实现从高动态范围图像(HDR)到低动态范围图像(LDR)的映射,并且不同显示设备的出现,需要实现HDR和之间的相互转换 ,即动态范围压缩(DRC,Dynamic Range Compression)。
233333
2020/11/24
2.3K0
ISP基础(08)-动态范围压缩
Laravel 广播系统工作原理
今天,让我们深入研究下 Laravel 的广播系统。广播系统的目的是用于实现当服务端完成某种特定功能后向客户端推送消息的功能。本文我们将学习如何使用第三方 Pusher 工具向客户端推送消息的功能。
柳公子
2018/09/17
9.2K1
Laravel 广播系统工作原理
ISP图像处理之动态范围压缩
自然界中真实场景能够表现比较广泛的颜色亮度区间,比如从很暗(10^-5 cd/m2)的黑夜到明亮(10^5 cd/m2)的太阳光,有将近10个数量级的动态方位。而传统显示设备所能显示的场景、视频和图像通常受限于硬件设备,通常只能表达出很小一部分的亮度范围,比如如常见的8比特图像显示0到255的整数范围,因此为了能够显示高动态范围的影响,需要实现从高动态范围图像(HDR)到低动态范围图像(LDR)的映射,并且不同显示设备的出现,需要实现HDR和LDR之间的相互转换 ,即动态范围压缩(DRC,Dynamic Range Compression)。
AomanHao
2022/01/14
2.4K0
ISP图像处理之动态范围压缩
ISP基础(02):宽动态范围WDR
WDR是wide dynamic range 的缩写,意思是宽动态范围。 根据百度百科,当在强光源(日光、灯具或反光等)照射下的高亮度区域及阴影、逆光等相对亮度较低的区域在图像中同时存在时,摄像机输出的图像会出现明亮区域因曝光过度成为白色,而黑暗区域因曝光不足成为黑色,严重影响图像质量。摄像机在同一场景中对最亮区域及较暗区域的表现是存在局限的,这种局限就是通常所讲的“动态范围”。而宽动态范围正是致力于解决此类场景中的问题。
233333
2020/11/13
4.2K0
ISP基础(02):宽动态范围WDR
Laravel的容器的工作原理
使用Laravel有一段时间了,终于抽点了时间看了一下其laravel实现的IOC控制反转的概念,确实很有意思。
老高的技术博客
2022/12/28
6580
动态图计算:Tensorflow 第一次清晰地在设计理念上领先
本文介绍了动态图计算在深度学习框架中的实现和优势,包括TensorFlow Fold、动态图计算和总结。
AlgorithmDog
2017/12/29
1.3K0
动态图计算:Tensorflow 第一次清晰地在设计理念上领先
调大动态端口范围解决tcpip告警
事件ID4227:EVENT_TCPIP_TCP_TIME_WAIT_COLLISION
Windows技术交流
2021/08/03
2.4K0
基于 Laravel 的用户动态模块开发
几乎所有的社区应用都有用户动态这个部分,用户可以通过好友动态获能取到更多感兴趣的内容,从而提高社区活跃度和用户粘性。它的实现相对来讲比普通的内容发布要复杂一些,主要体现在内容多样性上。 为了解决这个问题,我们得把这些不同类型的内容抽象,提取共性,使用相同的结构来处理,开发起来就会简单很多。 概念抽象 用户动态,顾名思义,动态的产生,就是一系列事件的历史记录,所以首先关注“事件”这个名词,它有哪些属性: 触发者,基于社区所有的事件几乎都是由用户触发的 事件主体,事件的主体信息,例如“xxx发布了文章” 中的
overtrue
2018/07/05
1.5K0
layui中laydate的使用——动态时间范围设置
比如:当前时间为2018.08.31,发起时间从,发起时间至,默认最大可选日期为2018.08.31,如果发起时间从,选择了2018.08.29,那么发起时间至,可选范围变成29号到31号;如果发起时间至选择了27号,那发起时间从的可选最大值不再是31号,而是变成27号
说故事的五公子
2020/07/08
8.1K0
Power Query提取并合并工作表指定范围
合并多表数据是常见的数据处理工作之一。无论大小公司,难免会遇到需要手工收集一些数据信息,可能是临时性的,也可能IT系统没有架设好的缘故。手工报表的最大特点是:存在一定的不规范性,给整合带来困难。
wujunmin
2021/09/07
1.9K0
Power Query提取并合并工作表指定范围
燃爆双十一 ,只在DNSPod
拼房拼车拼下午茶? 拼包拼酒拼丝袜? DNSPod 的富豪名媛 今年双十一我们不拼了 iphone 送送送 100件T-shirt 送送送 续费火葬场?6折续费只在DNSPod 关爱老用户!6折续费只在DNSPod 还在全网比价?最便宜,只在DNSPod 燃爆双十一 只在DNSPod  双十一活动预告来啦! 2020年11月11日 敬请期待 下单抽奖,礼品狂送 iphone 11,D妹同款T-shirt100件 抽抽抽! 阿D定制款水杯,下单就有领取机会! 分享抽奖、限时秒杀 批量转入、爆款域名
腾讯云DNSPod团队
2020/10/26
1.4K0
运维左移系列(二):工作范围分析(1)
上一篇提到运维左移围绕“提高业务连续性保障、提升业务交付速度、辅助提升客户体验、提升IT运营服务质量”4个价值分析运维左移,本篇围绕“提高业务连续性保障能力”这个运维价值分析运维左移的范围。
彭华盛
2022/11/16
1.7K0
OpenCV高动态范围成像(HDR)介绍与使用
目前大多数数字图像和成像设备每通道使用 8 位,因此将设备的动态范围限制在两个数量级(实际上是 256 个级别),而人眼可以适应变化十个数量级的光照条件。当我们拍摄真实世界场景的照片时,明亮的区域可能会曝光过度,而暗的可能会曝光不足,因此我们无法使用一次曝光来捕捉所有细节。HDR 成像适用于每通道使用超过 8 位(通常为 32 位浮点值)的图像,允许更宽的动态范围。
Color Space
2021/11/04
1.1K0
tcpip来源事件ID 4227/4231/4266 调大动态端口范围
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full
Windows技术交流
2021/09/18
4.2K0
Laravel5.8使用LayUI实现动态删除
其实在这里,我并没有把数据进行删除,而是把数据库中设置了一个状态值,0代表着正常,而1代表着已经删除,本着数据保护的原则,便于记录用户的操作数据,便于后期的查找以及维护,废话不多说,上代码!
Meng小羽
2019/12/22
8440
WIN10修改Hyper-V动态端口范围
因为使用Windows 10中的WSL 2功能需要启用Hyper-V,其结果是导致了IDEA在启动的时候提示端口被占用。
用户5746037
2022/05/18
1.7K0
点击加载更多

相似问题

laravel动态范围不工作

11

Laravel范围动态

211

动态创建的AJAX jQuery只在第一次工作

12

Laravel路由器-链路只在第一次工作

20

Laravel护照动态范围

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文