traineratwot/eloquent-meta
| Install | |
|---|---|
composer require traineratwot/eloquent-meta |
|
| Latest Version: | v1.1.0 |
| PHP: | ^8.4 |
| License: | MIT |
| Last Updated: | Aug 22, 2026 |
| Links: | GitHub · Packagist |
Eloquent Meta
Мощный пакет для управления метаданными колонок 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 для деталей.
Related Packages
Powerful PHP database abstraction layer (DBAL) with many features for database s...
Laravel Serializable Closure provides an easy and secure way to serialize closur...
Cli error handling for console/command-line PHP applications.
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v1.1.0 | ^8.4 | ^11.0| | MIT | |
| 1.0.1 | ^8.4 | ^11.0| | MIT | |
| 1.0.0 | ^8.4 | ^11.0| | MIT |