2014-01-27 76 views
1

關於範圍查詢,返回任何falsey值是否會導致Eloquent\Builder被返回?它會返回實際值(不管是數字,字符串,數組等),但如果我返回false,0,它總是爲空返回一個Eloquent \ Builder。如何從Laravel 4中的範圍查詢中返回falsey值?

有沒有辦法解決這個問題,並返回正確的類型時,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

你是否將這些函數聲明爲'static'?上面的例子對我來說很好,在PHP 5.3.27上使用laravel 4.1 – cecilozaur

+0

它們不是靜態的。當你說它工作正常,scopeTestFalse返回什麼? – Chris

+0

'int(0)'另一個返回'int(99)', 請確保將所有函數聲明爲static,因爲Eloquent實現了__callStatic()函數(只要您嘗試訪問不屬於你正在調用的課程)。 希望這是有道理的。 – cecilozaur

回答

2

作用域並不意味着是靜態的。此外,您可以在調用它們時放棄「範圍」部分 - 這是Laravel魔法的一部分。 IE:MyModel :: testFalse();如果您沒有操縱關係或查詢對象,但是您可能只是簡單地將它們變成一個函數而不是範圍 - 它繞過了用於鏈接查詢對象的一些魔法。