traineratwot/eloquent-meta

Meta data for columns of laravel models. integraded with filamentphp

Installs: 3

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 0

Forks: 0

Open Issues: 0

pkg:composer/traineratwot/eloquent-meta

1.0.0 2026-02-17 13:53 UTC

This package is auto-updated.

Last update: 2026-02-17 13:57:48 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Мощный пакет для управления метаданными колонок Laravel моделей. Сохраняйте дополнительные данные в JSONB формате с поддержкой Filament PHP.

Возможности

  • 📦 Легко добавлять метаданные к любым моделям
  • 🎯 Работа с вложенными ключами в метаданных
  • 💾 Хранение в JSONB формате для быстрого поиска
  • 🔗 Полиморфные отношения (MorphMany)
  • 🎨 Интеграция с Filament PHP (TODO!)
  • ⚡ Простой и интуитивный API
  • 🧪 Полностью протестировано

Установка

Установите пакет через Composer:

composer require traineratwot/eloquent-meta

Опубликуйте и запустите миграции:

php artisan vendor:publish --tag="eloquent-meta-migrations"
php artisan migrate

Опубликуйте конфиг файл (опционально):

php artisan vendor:publish --tag="eloquent-meta-config"

Использование

Подготовка модели

Добавьте трейт Meta и интерфейс UseMeta к вашей модели:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Traineratwot\EloquentMeta\Traits\Meta;
use Traineratwot\EloquentMeta\Interfaces\UseMeta;

class Post extends Model implements UseMeta
{
    use Meta;

    protected $fillable = ['title', 'content'];
}

Основные операции

Получить метаданные

$post = Post::find(1);

// Получить конкретный ключ
$bio = $post->getMeta('profile', 'bio');

// Получить конкретный ключ с значением по умолчанию
$bio = $post->getMeta('profile', 'bio', 'No bio');

// Получить все метаданные колонки
$allProfileData = $post->getMeta('profile');

Создать или обновить метаданные

$post->setMeta('profile', 'bio', 'Мой профиль');
$post->setMeta('profile', 'avatar_url', 'https://example.com/avatar.jpg');

// Цепочка вызовов
$post->setMeta('settings', 'theme', 'dark')
     ->setMeta('settings', 'language', 'en')
     ->save();

Добавить значение в массив

// Добавить тег
$post->pushMeta('profile', 'tags', 'php');
$post->pushMeta('profile', 'tags', 'laravel');

// Результат: ['tags' => ['php', 'laravel']]

Удалить метаданные

// Удалить конкретный ключ
$post->forgetMeta('profile', 'bio');

// Удалить всю ячейку метаданных
$post->forgetMeta('profile');

Проверить наличие метаданных

// Проверить наличие колонки
if ($post->hasMeta('profile')) {
    // ...
}

// Проверить наличие конкретного ключа
if ($post->hasMeta('profile', 'bio')) {
    // ...
}

Получить все метаданные

$profileData = $post->getAllMeta('profile');
// Результат: ['bio' => '...', 'avatar_url' => '...']

Примеры использования

// Сохранение SEO метаданных
$post->setMeta('seo', 'title', 'Мой пост')
     ->setMeta('seo', 'description', 'Описание поста')
     ->setMeta('seo', 'keywords', 'php, laravel')
     ->save();

// Сохранение пользовательских настроек
$user->setMeta('preferences', 'notifications', true)
     ->setMeta('preferences', 'theme', 'dark')
     ->setMeta('preferences', 'language', 'ru')
     ->save();

// Работа с массивами
$post->pushMeta('comments', 'ids', 1);
$post->pushMeta('comments', 'ids', 2);
$post->pushMeta('comments', 'ids', 3);

$commentIds = $post->getMeta('comments', 'ids');
// Результат: [1, 2, 3]

Структура базы данных

Пакет создает таблицу eloquent_metas со следующей структурой:

Колонка Тип Описание
id bigint Первичный ключ
model_id bigint ID модели
model_type string Тип модели (класс)
column string Название колонки метаданных
data jsonb Данные в формате JSON
created_at timestamp Дата создания
updated_at timestamp Дата обновления

Уникальный индекс на (model_id, model_type, column) обеспечивает, что для каждой модели и колонки существует только одна запись метаданных.

Интеграция с Filament PHP (TODO!)

Пакет БУДЕТ полностью интегрироваться c фрейворком Филамент php https://filamentadmin.com/docs

Тестирование

composer test

Changelog

Смотрите CHANGELOG для информации об изменениях.

Вклад

Смотрите CONTRIBUTING для деталей.

Безопасность

Пожалуйста, смотрите политику безопасности для информации о сообщении об уязвимостях.

Авторы

Лицензия

The MIT License (MIT). Смотрите License File для деталей.