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

laravel: odd behavior when query is empty

我有模型

我这样称呼它:

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);

我得到了这个结果:

但是

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

我得到的是 Null,所以它是正确的!

我怎样才能 return 为空?我哪里错了?

您不应该在范围内调用 first() - 您只是为了通过限制查询来调整查询。在应用 filter() 范围后,您应该在您的链中调用 first()。如果你想使用相同的语法而不是像那样链接,你最好定义一个自定义静态方法。

public static function filter($params)
{
    return self::wherePublish(1)
        ->whereIn_special(1)
        ->latest()
        ->first();
]

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