Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel larvel:查询为空时的奇怪行为_Laravel_Laravel 5.5_Laravel Eloquent - Fatal编程技术网

Laravel larvel:查询为空时的奇怪行为

Laravel larvel:查询为空时的奇怪行为,laravel,laravel-5.5,laravel-eloquent,Laravel,Laravel 5.5,Laravel Eloquent,我有一个模型 我这样称呼它: Sight::filter(['type'=>'menu']); 在模型中: public function scopeFilter($query,$params) { return $query ->wherePublish(1) ->whereIn_special(1) ->latest() ->first(); } 当有一个或多个记录时,它工作正常 但当数

我有一个模型

我这样称呼它:

Sight::filter(['type'=>'menu']);
在模型中:

public function scopeFilter($query,$params)
{
    return $query
        ->wherePublish(1)
        ->whereIn_special(1)
        ->latest()
        ->first();
}
当有一个或多个记录时,它工作正常

但当数据库为空时,我会有一种奇怪的行为:

使用
dd(视线::过滤器(['type'=>'menu'])

我得到了这个结果:

但是

dd(
$query
            ->wherePublish(1)
            ->whereIn_special(1)
            ->latest()
            ->first();
)
我得到了空值,所以它是正确的


如何返回空值?我怎么了?

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

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

还请注意,在您的示例中,您的作用域接受一个参数(并且您传递了一个),但它实际上没有在代码中使用。

您不应该在作用域内调用
first()
——您只需要通过约束它来调整查询。应用
filter()
作用域后,应在链中调用
first()
。如果您想使用相同的语法,而不是像那样使用链接,那么最好定义一个自定义静态方法

public static function filter($params)
{
    return self::wherePublish(1)
        ->whereIn_special(1)
        ->latest()
        ->first();
]
还请注意,在您的示例中,您的作用域接受一个参数(并且您传递了一个),但它实际上并未在代码中使用。

谢谢,关于
take()
paginate()
呢?它们在作用域中是无效的,比如
first()
take()
也可以,因为它只是向查询添加约束
paginate()
不是因为像
get()
first()
一样,它实际上正在执行查询。谢谢,关于
take()
paginate()
呢?它们在作用域中是无效的,比如
first()
take()
也可以,因为它只是向查询添加约束
paginate()
不是因为像
get()
first()
一样,它实际上正在执行查询。