2014-01-27 4 views
1

Что касается запросов к области видимости, предполагается ли это поведение, возвращающее значение falsey, будет возвращено возвращаемое Eloquent\Builder?Как вернуть значения false из запроса Scope в Laravel 4?

Если я возвращаю значение non-falsey (скажем, число, строка, массив и т. Д.), Он вернет фактическое значение (будь то число, строка, массив и т. Д.), Но если я верну false, 0, возвращает Eloquent \ Builder.

Есть ли способ обойти это и вернуть правильный тип, когда falsey вместо объекта типа построитель?

отведенной Test Case

В модели

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

Вы объявили эти функции «статическими»? приведенный выше пример отлично подходит для меня, используя laravel 4.1 на PHP 5.3.27 – cecilozaur

+0

Они не статичны. Когда вы говорите, что все нормально, что возвращает scopeTestFalse? – Chris

+0

'int (0)' другой возвращает 'int (99)', , чтобы объявить все функции static, поскольку Eloquent реализует функцию __callStatic() (которая запускается при каждом попытке доступа к статическому методу, который не является частью класс, который вы вызываете). Надеюсь, что это имеет смысл. – cecilozaur

ответ

2

Прицелы не предназначены, чтобы быть статичным. Кроме того, вы можете отбросить часть «scope» при вызове - часть магии Laravel. IE: MyModel :: testFalse(); Если вы не манипулируете отношениями или объектом запроса, вы можете просто просто сделать их функцией, а не областью, которая обходит некоторые из магии, используемой для цепочки объектов запроса.

Смежные вопросы