All Projects → Astrotomic → laravel-cachable-attributes

Astrotomic / laravel-cachable-attributes

Licence: MIT license
Allows to cache attribute accessor values in an easy way.

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to laravel-cachable-attributes

Laravel Ban
Laravel Ban simplify blocking and banning Eloquent models.
Stars: ✭ 572 (+2283.33%)
Mutual labels:  eloquent, trait
userstamps
A simple package to insert and load userstamps for a model automatically, it provides an eloquent trait to use in models..
Stars: ✭ 34 (+41.67%)
Mutual labels:  eloquent, trait
magicproperties
A little but powerful package that allows you call getters and setters implicitly in PHP.
Stars: ✭ 13 (-45.83%)
Mutual labels:  trait, accessor
Laravel Likeable
Rate Eloquent models with Likes and Dislikes in Laravel. Development moved to Laravel Love package!
Stars: ✭ 95 (+295.83%)
Mutual labels:  eloquent, trait
Eloquent Sortable
Sortable behaviour for Eloquent models
Stars: ✭ 914 (+3708.33%)
Mutual labels:  eloquent, trait
Befriended
Eloquent Befriended brings social media-like features like following, blocking and filtering content based on following or blocked models.
Stars: ✭ 596 (+2383.33%)
Mutual labels:  eloquent, trait
laravel-tmdb
Interact with TMDB data in your Laravel application.
Stars: ✭ 25 (+4.17%)
Mutual labels:  eloquent, treeware
Laravel Imageup
Auto Image & file upload, resize and crop for Laravel eloquent model using Intervention image
Stars: ✭ 646 (+2591.67%)
Mutual labels:  eloquent, trait
Laravel Ownership
Laravel Ownership simplify management of Eloquent model's owner.
Stars: ✭ 71 (+195.83%)
Mutual labels:  eloquent, trait
Schedule
Schedule is a package that helps tracking schedules for your models. If you have workers in a company, you can set schedules for them and see their availability though the time.
Stars: ✭ 155 (+545.83%)
Mutual labels:  eloquent, trait
laravel-quasar
⏰📊✨Laravel Time Series - Provides an API to create and maintain data projections (statistics, aggregates, etc.) from your Eloquent models, and convert them to time series.
Stars: ✭ 78 (+225%)
Mutual labels:  eloquent
inertiajs-tables-laravel-query-builder
Inertia.js Tables for Laravel Query Builder
Stars: ✭ 391 (+1529.17%)
Mutual labels:  eloquent
yii2-render-many
Trait for Yii Framework 2
Stars: ✭ 14 (-41.67%)
Mutual labels:  trait
acorn-db
Provides Acorn projects with Eloquent Models for WordPress data.
Stars: ✭ 30 (+25%)
Mutual labels:  eloquent
laratools
A collection of useful everyday tools for Laravel
Stars: ✭ 17 (-29.17%)
Mutual labels:  eloquent
file-input-accessor
Angular directive that provides file input functionality in Angular forms.
Stars: ✭ 32 (+33.33%)
Mutual labels:  accessor
laravel-attribute-observer
Observe (and react to) attribute changes made on Eloquent models.
Stars: ✭ 59 (+145.83%)
Mutual labels:  eloquent
laravel-nestedupdater
Package for allowing updating of nested Eloquent model relations using a single nested data array.
Stars: ✭ 19 (-20.83%)
Mutual labels:  eloquent
eloquence
Eloquence provides a cache on top of Eloquent that prevents multiple models being created for a single database row using the Identity Map design pattern.
Stars: ✭ 18 (-25%)
Mutual labels:  eloquent
state-machine
The hyn state machine package is a flexible library that helps you move Eloquent models from States through Transitions while emitting events along the way.
Stars: ✭ 14 (-41.67%)
Mutual labels:  eloquent

Laravel cachable Attributes

Latest Version MIT License Offset Earth Larabelles

Total Downloads GitHub Workflow Status StyleCI

If you want to cache your heavy attribute accessors - this package is for you!

This Laravel package provides a trait to use in your models which provides methods to cache your complex, long running, heavy model accessor results.

Installation

You just have to run composer require astrotomic/laravel-cachable-attributes. There's no ServiceProvider or config or anything else.

Quick Example

Sometimes you have properties which run addition database queries, do heavy calculations or have to retrieve data from somewhere. This slows down your application and if you access the attribute multiple times the accessor is also executed multiple times.

class Gallery extends Model
{
    public function images(): HasMany
    {
        return $this->hasMany(Image::class, 'gallery_id');
    }

    public function getStorageSizeAttribute(): int
    {
        return $this->images()->sum('file_size');
    }
}

This example would run the sum query every time you access $gallery->storage_size. By using the trait you can prevent this.

use Astrotomic\CachableAttributes\CachableAttributes;
use Astrotomic\CachableAttributes\CachesAttributes;

class Gallery extends Model implements CachableAttributes
{
    use CachesAttributes;

    protected $cachableAttributes = [
        'storage_size',
    ];

    public function images(): HasMany
    {
        return $this->hasMany(Image::class, 'gallery_id');
    }

    public function getStorageSizeAttribute(): int
    {
        return $this->remember('storage_size', 0, function(): int {
            return $this->images()->sum('file_size');
        });
    }
}

This will run the database query only once per request. The ttl of 0 means to cache only for the current runtime. You could also use null or rememberForever() to remember the value forever (until manually deleted). Or use any positive number to cache for the amount of seconds.

Changelog

Please see CHANGELOG for more information on what has changed recently.

Contributing

Please see CONTRIBUTING for details. You could also be interested in CODE OF CONDUCT.

Security

If you discover any security related issues, please check SECURITY for steps to report it.

Credits

Treeware

You're free to use this package, but if it makes it to your production environment I would highly appreciate you buying the world a tree.

It’s now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you contribute to my forest you’ll be creating employment for local families and restoring wildlife habitats.

You can buy trees at offset.earth/treeware

Read more about Treeware at treeware.earth

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].