如何从Laravel 4中的Scope Query返回falsey值?

时间:2014-01-27 05:49:58

标签: php laravel laravel-4 eloquent

关于范围查询,返回任何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)

1 个答案:

答案 0 :(得分:2)

范围并不是静态的。此外,你可以在调用它们时删除“范围”部分 - 这是Laravel魔法的一部分。 IE:MyModel :: testFalse();如果你不是在操纵一个关系或查询对象,你可能只想让它们成为一个函数,而不是一个范围 - 它绕过了一些用于链接查询对象的魔法。