Skip to content

AuthentikCanada/eloquent-cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Eloquent Cache

Easily cache your Laravel's Eloquent models.

Build Status Coverage Status Latest Stable Version Total Downloads

Requirements

  • PHP >= 7.2

  • Laravel 6 / 7 / 8

Installation

Install via composer :

composer require authentik/eloquent-cache

How it works

  • When Eloquent fetches models, the JSON representations of the model instances are cached.

  • Subsequently, when eloquent fetches a model by ID, the cached JSON will be converted back into an instance.

Usage

Use the Cacheable trait in the models you want to cache.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Authentik\EloquentCache\Cacheable;

class Category extends Model
{
    use Cacheable;


    /*
     * You can optionally override the following functions:
     */
    
    // Time To Live in minutes (default value: 0 => no TTL)
    public function getCacheTTL() {
        return 60;
    }

    // default value: the lowercase name of the model
    public function getCacheTagName() {
        return 'cat';
    }

    // Cache busting will automatically invalidate the cache when model instances are updated or deleted.
    // default value: true
    public function isCacheBustingEnabled() {
        return false;
    }

    // Whether or not to keep model instances in a static array cache
    //  (useful to avoid querying the cache store/building instances from json multiple times)
    // default value: true
    public function isStaticCacheEnabled() {
        return false;
    }
}

To manually cache a model instance, use the cache method.

Category::find(1)->cache();

To invalidate the cache for a model instance, use the refresh or flush method.

$refreshedInstance = Category::find(1)->refresh();

// or

Category::flush(Category::find(1));

To invalidate the cache for all instances of a model, use the flush method.

Category::flush();

Changelog

Click Here