laravel:查询为空时的奇怪行为

时间:2018-01-05 03:18:57

标签: laravel laravel-5.5 laravel-eloquent

我有一个模特

我这样称呼它:

Sight::filter(['type'=>'menu']);

并在模型中:

public function scopeFilter($query,$params)
{
    return $query
        ->wherePublish(1)
        ->whereIn_special(1)
        ->latest()
        ->first();
}

当有一条或多条记录时,它会正常工作。

但是当数据库为空时我得到一个奇怪的行为:

dd(Sight::filter(['type'=>'menu']))

$query
        ->wherePublish(1)
        ->whereIn_special(1)
        ->latest()
        ->first();
        dd($query);

我得到了这个结果:

enter image description here

但是

dd(
$query
            ->wherePublish(1)
            ->whereIn_special(1)
            ->latest()
            ->first();
)

我得到了Null所以它是对的!

我怎么能返回Null?我错了什么?

1 个答案:

答案 0 :(得分:2)

您不应该在范围内调用 `=SUMIFS($B$2:$B$4,$A$2:$A$4,E2) + SUMIFS($D$2:$D$4,$C$2:$C$4,E2)` - 您只是想通过约束来调整查询。应用first()范围后,您应该在链中调用first()。如果你想使用相同的语法而不是像这样链接,你最好定义一个自定义的静态方法。

filter()

另请注意,在您的示例中,您的作用域接受一个参数(并将其传递给一个参数),但它实际上并未在您的代码中使用。