Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Static Entity Laravel Package

byscripts/static-entity

Static Entity provides model/entity-like behavior backed by static arrays. Define constants and a dataset to access rich objects without a database—ideal for enums, reference lists, and small lookup tables in PHP/Laravel apps.

View on GitHub
Deep Wiki
Context7

Byscripts Static Entity

Provides an easy way to get some entity/model behavior with static data

Build Status Latest Stable Version License Scrutinizer Code Quality Code Coverage Codeship Status for ByScripts/static-entity

Installation

Add the package in your composer.json

At command line, run composer require byscripts/static-entity:~3.0

Usage

Create your static entity

<?php
use Byscripts\StaticEntity\AbstractStaticEntity;

class WebBrowser extends AbstractStaticEntity
{
    const CHROMIUM = 1;
    const FIREFOX  = 2;
    const IE       = 3;
    const OPERA    = 4;
    const SAFARI   = 5;

    private $name;
    private $brand;
    private $engine;
    private $license;

    public function getName()
    {
        return $this->name;
    }

    public function getBrand()
    {
        return $this->brand;
    }

    public function getEngine()
    {
        return $this->engine;
    }

    public function getLicense()
    {
        return $this->license;
    }

    static public function getDataSet(): array
    {
        return [
            self::CHROMIUM => [
                'name'    => 'Chromium',
                'brand'   => 'Google',
                'engine'  => 'Blink',
                'license' => 'BSD'
            ],
            self::FIREFOX => [
                'name'    => 'Firefox',
                'brand'   => 'Mozilla',
                'engine'  => 'Gecko',
                'license' => 'MPL'
            ],
            self::IE => [
                'name'    => 'Internet Explorer',
                'brand'   => 'Microsoft',
                'engine'  => 'Trident',
                'license' => 'Proprietary'
            ],
            self::OPERA => [
                'name'    => 'Opera',
                'brand'   => 'Opera Software',
                'engine'  => 'Blink',
                'license' => 'Proprietary'
            ],
            self::SAFARI => [
                'name'    => 'Safari',
                'brand'   => 'Apple',
                'engine'  => 'WebKit',
                'license' => 'Proprietary'
            ]
        ];
    }
}

Play with it

<?php

// Get an instance of WebBrowser, hydrated with Firefox data
$firefox = WebBrowser::get(WebBrowser::FIREFOX);

// Instanciated objects are singleton
WebBrowser::get(WebBrowser::FIREFOX) === WebBrowser::get(WebBrowser::FIREFOX); // true

// The getId() method is always available.
// It returns the key used in the getDataSet() method;
$firefox->getId(); // 2

// Other methods are ones implemented in the static entity
$firefox->getName(); // Firefox

// The toId() method transform an entity to ID.
// If an id is passed, it is returned as is, after checking it exists.
// The method is mainly intended for a setter method to accept both type.
WebBrowser::toId($firefox); // 2
WebBrowser::toId(2);        // 2

// The getIds() method returns an array of all ids present in data set
WebBrowser::getIds(); // [1, 2, 3, 4, 5]

// The getAssoc() returns an associative array with `id` as key and `name` as value
WebBrowser::getAssociative(); // [1 => 'Chromium', 2 => 'Firefox', ...]

// You can also pass the name of an argument you want to use as value
WebBrowser::getAssociative('brand'); // [1 => 'Google', 2 => 'Mozilla', 3 => 'Microsoft', ...]

// The getAll() method returns an array containing all instances of entities
WebBrowser::getAll(); // [Object, Object, ...]

// The exists() method check whether the passed ID exists in data set
WebBrowser::hasId(3); // true
WebBrowser::hasId(9); // false

Alternative usage

You can also use the Provider class.

In this case, your entity is not required to extends AbstractStaticEntity, but still needs to implements StaticEntityInterface

<?php
use Byscripts\StaticEntity\Provider;

Provider::get(WebBrowser::class, WebBrowser::FIREFOX);
Provider::getAssociative(WebBrowser::class);
Provider::getAssociative(WebBrowser::class, 'otherKey');
Provider::getIds(WebBrowser::class);
Provider::getAll(WebBrowser::class);
Provider::hasId(WebBrowser::class, WebBrowser::CHROMIUM);
Provider::toId(WebBrowser::class, $instanceOrId);
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity
christhompsontldr/laravel-inky
spatie/mailcoach-vapor