关于范围查询,返回任何falsey
值的行为是否会导致返回Eloquent\Builder
?
如果我返回任何non-falsey
值(比如一个数字,字符串,数组等),它将返回实际值(无论是数字,字符串,数组等),但如果我返回false,0, null它总是返回一个Eloquent \ Builder。
有没有办法解决这个问题,并在falsey
而不是类型构建器的对象时返回正确的类型?
抽象测试用例
在模型中
class MyModel extends Eloquent
{
public function scopeTestFalse{
return 0;
}
public function scopeTestTrue()
{
return 99;
}
}
在路线
var_dump(MyModel::scopeTestFalse()); // object(Illuminate\Database\Eloquent\Builder)
var_dump(MyModel::scopeTestTrue()); // int(99)
答案 0 :(得分:2)
范围并不是静态的。此外,你可以在调用它们时删除“范围”部分 - 这是Laravel魔法的一部分。 IE:MyModel :: testFalse();如果你不是在操纵一个关系或查询对象,你可能只想让它们成为一个函数,而不是一个范围 - 它绕过了一些用于链接查询对象的魔法。