Искал реализацию EAV (Entity-Attribute-Value) паттерна на PHP или Symfony и не нашел. Типичная задача, но, на удивление, нет таких библиотек. Решил сделать свою — EAV bundle (GitHub). Есть достаточно подробная документация.

Основные возможности:

  • Атрибуты могут иметь значения любого типа (single type) или перечисления (enum), определяемые пользователем. Они также могут быть одиночными или множественными.

  • Привязка атрибутов к одной или нескольким категориям или тегам. Например, вы хотите отображать определённые атрибуты товара только для одной или нескольких категорий товаров. Также можно включить атрибуты родительских категорий.

  • Один атрибут может быть связан с несколькими типами сущностей и тегов.

  • Конвертирование и инвертирование EAV в базу данных и из неё на стороне клиента. Внутренняя проверка входных данных.

  • Фабрика для создания запросов на фильтрацию сущностей по атрибутам с проверкой привязки тегов.

  • Слушатель, который проверяет изменённые теги, атрибуты, сущности и удаляет потерянные EAV из базы данных.

  • Готовый к использованию пользовательский интерфейс CRUD для EAV, основанный на Symfony Forms и интегрированный с EasyAdmin.

Было бы неплохо еще реализовать создание сущностей через MakerBundle, чтение опций из PHP атрибутов сущности, ре��лексии и некоторые другие возможности.