我有一个模特
我这样称呼它:
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所以它是对的!
我该怎么回Null?我错了什么?
你不应该在范围内调用first()
- 你只是想通过约束来调整查询。在应用first()
范围后,您应该在链中调用filter()
。如果要使用相同的语法而不是像这样链接,最好定义自定义静态方法。
public static function filter($params)
{
return self::wherePublish(1)
->whereIn_special(1)
->latest()
->first();
]
另请注意,在您的示例中,您的作用域接受一个参数(并将其传递给一个参数),但它实际上并未在您的代码中使用。