Есть ли в Laravel какие-то методы для динамического добавления полей в модель/сущность на основе MySQL?



@romicohen

Существует потребность из админки добавлять и удалять поля модели/сущности (например: чтобы админ сайта мог добавить пользователям поле в профайл и организовать по ним фильтрацию).

Есть ли в Laravel какие-то готовые механизмы для этого в контексте MySQL, без использования полей типа json?

Грубо говоря: чтобы добавить поле в таблицу, новое свойство в класс модели, и так далее.


Решения вопроса 1



@lavren

Может лучше использовать META поля. Как-бы добавил поле и есть, не добавил и нет. Описанный способ мазохизм. Мета поля можно добавлять в модель при выводе и итог будет такой как надо.



3

комментария


Ответы на вопрос 2



@solotony

менять базу данных — пожалуйста DB::statement( .... );
но вот вся магия laravel конечно будет недоступна,

я таким образом делал движок для магазина с настраиваемыми полями



@AmdY

Вы придумали проблему там где её нет, потому что объединили две несвязанные задачи.
Добавление и прочие изменения можно подсмотреть в миграциях, есть готовый компонент IlluminateDatabaseSchemaBuilder
После этого поле ничем не отличается от остальных. Это не Doctrine, где поля надо явно прописывать.

Вторая задача это работа админки, она никак не связана с путём появления поля в модели. Та же простейшая динамическая сортировка или фильтрация делается в лоб.
Допустим в урле приходит
?filterBy=fieldName&filterValue=value&filteOperation=%3D
в контроллере
$model->where($request->get(‘filterBy’), urldecode($request->get(‘filterOperation’)), $request->get(‘filterValue’));
И не важно как вы добавили колонку и есть ли она вообще в базе, Eloquent не проверяет этого.
Но не забывайте про безопасность.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *