2014-09-23 32 views
5

laravel önbelleğe alma mekanizması çalışıyor sorgu (istekli yükleme).laravel önbelleğe alma sorguları

Yukarıdaki örnekte yapılan tüm sorguları önbelleğe almanın bir yolu var mı? Teşekkürler!

cevap

2

eagler loading sorgularını bu şekilde önleyemezsiniz.

$users = Cache::remember('custom_cache_key', 10, function() { 
    return User::with('posts', 'addresses')->get(); 
}); 

veya sorgu oluşturucu kullanarak tek bir sorgu oluşturmak:

User::with(['posts' => function ($q) { 
    $q->remember(10); 
}, 'addresses' => function ($q) { 
    $q->remember(10); 
}])->remember(10)->get(); 

veya ilişki tanımında:

...->select(...)->join(...)->where(...)->remember(...) 
+0

kod nasıl soruya cevap verir. – Cfreak

4

satır içi yapabiliriz cache::remember motor - Seçmen 2 çözümler var :

public function posts() 
{ 
    return $this->hasMany('Post')->remember(10); 
} 
+0

Jarek, eğer ilgili bir model güncellenirse. Tüm istekli yüklenen sorguyu veya sadece belirli model değişikliğini geçersiz kılmalı mıyız? Bunu da burada (https://laracasts.com/discuss/channels/laravel/how-to-properly-do-caching-in-laravel-52) sordum. –

+0

@AliGajani Gerçekle başlayalım, 'hatırlama 'metodu bir süre önce kaldırıldı, bu yüzden L5 + kullanmak kendi başınıza yapmanız gerektiği anlamına geliyor. Bu, özel bir önbelleğe alma sistemi ile sonuçlanır, bu durumda, güncelleme durumunda uygun önbelleğe alınmış sorguları geçersiz kılabilir/yenileyebilirsiniz. Önbelleğinizi sorguya dayandırdıysanız ('hatırla' yöntemi gibi), o zaman güncellenmiş olan ilgili tabloya karşı yalnızca birini geçersiz kılmanız gerekir. –

İlgili konular