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

问题描述 投票:0回答:1

我有一个模特

我这样称呼它:

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?我错了什么?

laravel laravel-5.5 laravel-eloquent
1个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.