WARNING!!!
This package no longer maintained, please, use https://github.com/SlyDeath/laravel-nested-caching instead, (*1)
Nested Caching Π΄Π»Ρ Laravel 5
, (*2)
ΠΠ΅ΡΡΠΈΠΈ
ΠΠ΅ΡΡΠΈΡ 3.* Π΄Π»Ρ Laravel 5.8, Π΄Π»Ρ 5.6-5.7 ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π»ΠΈΠ· 2.*, (*3)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ Π² composer.json:, (*4)
composer require slydeath/laravel5-nested-caching
ΠΡΠΊΡΡΡΡ config/app.php
ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ² providers
:, (*5)
SlyDeath\NestedCaching\NestedCachingServiceProvider::class,
ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ:, (*6)
php artisan vendor:publish --provider="SlyDeath\NestedCaching\NestedCachingServiceProvider" --tag=config
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡ ΠΊΡΡ-Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΡΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ - ΡΡΠΎ Memcached ΠΈΠ»ΠΈ Redis., (*7)
Π .env
ΡΠ°ΠΉΠ»Π΅ Π΄Π»Ρ Memcached ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ:, (*8)
CACHE_DRIVER=memcached
Π΄Π»Ρ Redis:, (*9)
CACHE_DRIVER=redis
Π’Π°ΠΊ ΠΆΠ΅ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Redis Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ predis/predis
:, (*10)
composer require predis/predis
ΠΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΡΡΠ΅Π·ΠΊΠ° html
Π§ΡΠΎΠ±Ρ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΡΡΠΎΠΊ HTML, Π½ΡΠΆΠ½ ΠΎΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ @cache
ΠΊΠ»ΡΡ Π΄Π»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°:, (*11)
@cache('simple-cache')
<div>ΠΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΊΡΡΠΎΠΊ HTML ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎ ΠΊΠ»ΡΡΡ "simple-cache"</div>
@endcache
ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠ»Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, ΡΡΠ΅ΠΉΡ NestedCacheable
:, (*12)
use SlyDeath\NestedCaching\NestedCacheable;
class User extends Model
{
use NestedCacheable;
}
Π ΡΠ°Π±Π»ΠΎΠ½Π΅, Π΄Π»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ @cache
Π΅Ρ ΠΈΠ½ΡΡΠ°Π½Ρ:, (*13)
@cache($user)
<div>ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ App\User:</div>
<ul>
<li>ΠΠΌΡ: {{ $user->name }}</li>
<li>Email: {{ $user->email }}</li>
</ul>
@endcache
ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ
ΠΠ»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π²ΡΠΎΡΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ Π²ΡΠ΅ΠΌΡ ΠΆΠΈΠ·Π½ΠΈ Π² ΠΌΠΈΠ½ΡΡΠ°Ρ
:, (*14)
html
@cache($user, 1440)
<div>...</div>
@endcache
, (*15)
ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ "ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ"
Π§ΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ±ΡΠ°ΡΡΠ²Π°Π»ΡΡ ΠΊΡΡ "ΠΌΠΎΠ΄Π΅Π»ΠΈ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ",
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠ»Π΅ updated_at
Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ:, (*16)
use SlyDeath\NestedCaching\NestedCacheable;
class CarUser extends Model
{
use NestedCacheable;
protected $touches = ['user']; // Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ
public function user()
{
return $this->belongsTo(User::class);
}
}
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:, (*17)
resources/views/user.blade.php, (*18)
@cache($user)
<section>
<h2>ΠΠ²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ {{ $user->name }}</h2>
<ul>
@foreach($user->cars as $car)
@include('user-car');
@endforeach
</ul>
</section>
@endcache
resources/views/user-car.blade.php, (*19)
@cache($car)
<li>{{ $car->brand }}</li>
@endcache
ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ
ΠΡΠΈΠΌΠ΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ:, (*20)
@cache($users)
@foreach ($users as $user)
@include('user');
@endforeach
@endcache