Weave 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.
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table
siberfx/flysystem-wasabi
hollyit/token-replace
ippanelcom/laravel-sdk
adachsoft/changelog-linter
adachsoft/collection
payerurl/telegrambot-crypto-payment-instant-payout
dskripchenko/laravel-hybrid-search
riorizkyrainey/lara-ced
mehedimi/static-vel
zharp/zharp
nonsapiens/bigquery-model-sync
lgu-bayambang-ict-office/lgu-laravel-development-standards
andydefer/laravel-support
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel