2014-12-02 39 views
1

是否有可能在Laravel 4使用的存取進行比較,例如:Laravel 4:如何在WHERE子句使用一個訪問

class User extends Eloquent { 

    // define Accessor 
    public function getSpecialNameAttribute() 
    { 
     return 'Joda'; 
    } 

} 

$User = User::where('gender','=','male')->where('specialName','=','Joda'); 

回答

4

是的,你可以用它來過濾查詢結果:(!)

User 
    ::where('gender','=','male') 
    ->get() 
    ->filter(function($item) { 
     return $item->specialName === 'Luke'; 
    }); 

注意篩選將quering DB後應用,所以在大數據的情況下,該解決方案將有性能問題。

欲瞭解更多詳情,我已經爲你搜索this Collections tutorial

另外我建議query scopes可能是最有用的方式來完成你的任務。

+0

是的,這是我尋找的方式。在我的情況下,沒有大數據,所以這已經足夠了。謝謝! – Olli 2014-12-04 13:51:28

0

不,你不能這樣使用它。

當你使用:

$user = User::where('gender','=','male')->where('specialName','=','Joda')->get(); 

你會嘗試與Joda字符串比較數據庫specialName列。

你不能在這裏使用訪問器,因爲訪問器可能非常複雜,然後Laravel需要從數據庫中的表中獲取所有數據(例如100000條記錄)並計算它們的訪問器,以便只爲你獲得所需的記錄(例如1條記錄)。

只有當您有對象實例時才能使用存取器,並且在查詢數據庫時將無法使用存取器。