您好,iam是laravel和iam的新手,它试图学习作用域,但在函数参数内找不到有关$ query和$ builder变量的任何信息。有人可以解释为什么需要使用这些变量的原因,因为在调用范围方法时,您没有传递任何参数。
答案 0 :(得分:0)
通过$query
/ $builder
变量,您可以像使用Eloquent
模型或DB
$query->where('admin', true);
基本上,作用域使您可以采用多个约束(where子句,联接,having等)并使其受约束,因此您只需要链接一个方法,而不必在多个位置添加相同的逻辑。
示例
假设您有一个产品表,并且要检查该商品是否为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();
合并范围还可以采用参数
假设我们有一个offers表,其中有一个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();