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()
一样,它实际上正在执行查询。