innoboxrr/traits

Traits para mejorar la vida, por Innobox R&R
1,544
Install
composer require innoboxrr/traits
Latest Version:2.1.0
PHP:^8.2
License:MIT
Last Updated:Sep 14, 2026
Links: GitHub  ·  Packagist
Maintainer: hrauvc

Traits

Model and value-object helpers, extracted from production Laravel work.

A small set of focused traits. Each one is independent — take only what you need.

Trait Purpose
ArrayOperations isNotEmpty and wrapImplode for arrays
DtoTrait A key/value data container with dot-notation access (get, set, has, only, except, merge, toJson…). setData() loads the class's own properties into it
EnumTrait Helpers for backed enums: getValues(), getKeys(), getValue(), isValid(), isValidKey(), isValidKeyValue()
MetaOperations Key/value metas in a <model>_metas table, plus a JSON payload copy
ModelAppendsTrait Manage appended attributes without bloating the model
DumpsGlobalScopes Inspect which global scopes are active on a query — a debugging aid
SemVerOperations Parse, compare and bump semantic versions

MetaOperations

Metas are extra fields that don't deserve a column: each one is a key/value row in the model's <model>_metas table. payload is a JSON column on the model that gathers them, so reading them costs no queries.

use Illuminate\Database\Eloquent\Relations\HasMany;
use Innoboxrr\Traits\MetaOperations;

class Article extends Model
{
    use MetaOperations;

    // What a form may write.
    protected $editable_metas = ['seo_title', 'seo_description'];

    // What only your code writes. Wins over $editable_metas.
    protected $protected_metas = ['views'];

    protected function casts(): array
    {
        return ['payload' => 'array'];
    }

    public function metas(): HasMany
    {
        return $this->hasMany(ArticleMeta::class);
    }

    public function buildPayload(): array
    {
        return $this->metas()->pluck('value', 'key')->all();
    }

    public function updatePayload(): bool
    {
        $this->payload = $this->buildPayload();

        return $this->save();
    }
}

The metas table needs key, value (text), the foreign key and a unique index on (key, <model>_id).

Method What it does
update_metas($requestOrArray, Meta::class, 'article_id') The form path. Writes the keys in $editable_metas that are not in $protected_metas. An empty value (null, blank string, empty array) deletes the meta; a key that isn't sent is left alone. Arrays are stored as JSON.
setMeta($key, $value) / setMetas([...]) The code path. No whitelist, so this is how protected metas are written. Arrays are stored as JSON; setMetas([]) does nothing.
meta($key, $default) Reads one meta from the table, as stored: a JSON meta comes back as a string.
getPayload('seo.title', $default) Reads the payload copy with dot notation.
metas_array($requestOrArray) What update_metas would write.
protectedMetas() The keys only the system writes.

setMeta does not refresh payload: call updatePayload() after writing metas from code.

Console commands

  • metas:regpayload {modelClass} {--modelId=} — calls updatePayload() on one model or all of them, and reports the ones that fail.
  • meta:cleanup {models*} — removes duplicate (key, <model>_id) rows and adds the unique index. MySQL only.

Install

composer require innoboxrr/traits
php artisan vendor:publish --provider="Innoboxrr\Traits\Providers\AppServiceProvider" --tag=config

Full documentation of the ecosystem, in Spanish and English: https://innoboxrr.github.io/docs/paquetes/support-traits-search.


Part of Innobox R&R — 52 open-source packages extracted from production work. innobox.systems

Related Packages

gabrieloliverio/laravel5-generators

Database metadata-based generators for Laravel 5

1
erirk/paypalpayment

laravel-paypalpayment is simple package help you process direct credit card paym...

0
doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

628,058,007 9,707
laravel/framework

The Laravel Framework.

576,155,700 34,907
laravel/tinker

Powerful REPL for the Laravel framework.

485,678,092 7,440