2016-01-16 36 views
1

我真的很喜歡它laravel如何處理與一些代碼行的關係。但是,當數據量很大時,通過向數據庫發出很多請求來減緩數據量。Laravel關係與運行時間 - >如何減少數據庫查詢的數量

class Object extends Model { 
    public function users() { 
     return $this->hasMany(User::class); 
    } 
} 

class User extends Model { 
    proteced $appends = [ 
     'url' 
    ]; 

    public function object() { 
     return $this->belongsTo(Object::class); 
    } 

    public function getUrlAttribute() { 
     return 'exmaple.com/object/' . $this->object->value . '/user/' . $this->id; 
    } 
} 

當我打電話

return Object::with('users')->find(2); 

它將使總是一個新的數據庫查詢的URL生成。

那麼有沒有一種乾淨的方式來減少查詢量,以便我可以加快應用程序的速度?

+0

您可以使用緩存,例如使用此包:https://github.com/dwightwatson/rememberable。或者使用Object :: with('users') - > get()'來獲取所有對象,然後使用foreach – balping

+0

我試着用文件的laravel的普通緩存函數,但時間仍然是一樣的。 – mimo

回答

0

在這種情況下,您正在導致新的查詢,因爲您正在調用未在用戶上加載的關係。你可以貪婪加載更多:

Object::with('users.object').... 

但你也可以保留的,因爲這些方式參照而無限地走這行。

也許該方法不屬於用戶模型,如果你打算以這種方式使用它。