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();
]
另请注意,在您的示例中,您的范围接受一个参数(并且您将其传递给它一个),但它实际上并未在您的代码中使用。
我有模型
我这样称呼它:
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();
]
另请注意,在您的示例中,您的范围接受一个参数(并且您将其传递给它一个),但它实际上并未在您的代码中使用。