$ query $ builder变量?

时间:2019-03-14 08:06:45

标签: laravel laravel-5

您好,iam是laravel和iam的新手,它试图学习作用域,但在函数参数内找不到有关$ query和$ builder变量的任何信息。有人可以解释为什么需要使用这些变量的原因,因为在调用范围方法时,您没有传递任何参数。

1 个答案:

答案 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_fromavailable_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();