laravel - $query $builder 变量?
问题描述
你好,我对 laravel 有点陌生,我正在尝试学习作用域,但我在函数参数中找不到任何关于 $query 和 $builder 变量的信息。有人可以解释为什么你需要使用这些变量,因为你调用范围方法你不传递任何参数。
解决方案
$query
/$builder
变量允许您以与使用模型相同的方式将约束添加到查询中,Eloquent
或者DB
$query->where('admin', true);
范围基本上允许您采用多个约束(where 子句、连接、拥有等)并使其实现,因此您只需链接一个方法,而不是在多个位置添加相同的逻辑。
例子
假设您有一个 products 表,并且您想检查该项目是否active
存在stock
。如果你不使用范围,你会得到类似的东西:
Product::where('active', true)->where('quantity', '>=', 1)->get();
然而,您可以在模型中创建一个范围available
:
public function scopeAvailable($query)
{
$query->where('active', true)->where('quantity', '>=', 1);
}
然后你可以简单地做:
Product::available()->get();
范围也可以带参数
假设我们有一个 offer 表,其中有一个available_from
和available_to
日期,并且您想要获取特定日期可用的所有行:
Offer::where('available_from', '<=', $date)
->where('available_to', '>=', $date)
->get();
或者我们可以做一个availableOn
范围
public function scopeAvailableOn($query)
{
$query->where('available_from', '<=', $date)->where('available_to', '>=', $date);
}
这将允许您执行以下操作:
Offer::availableOn($date)->get();
推荐阅读
- apache-kafka - kafka消费者从单个分区向消费者分发消息| 选择
- angular - 如何将字符串映射到 Observable
角度值 - excel - Excel 函数连接返回意外的附加双引号字符
- c# - 如何使用 C# 生成的密钥在 Angular 中使用 RSA 加密数据
- python - 我无法使用 Python tkinter 在新窗口上显示图像
- android - 带有嵌套动态 WHERE 子句的 Room @Relation
- linux - 删除 -mtime 选项中的硬编码天数以在 shell 脚本中查找文件
- vue.js - Vue 无法读取 undefined 的属性影片
- architecture - 手柄的另一边是什么?
- javascript - 通过 $set 更改对象属性给出:“TypeError: Cannot read property 'call' of undefined”