Разработка пользовательских полей для многоклиентного приложения - PullRequest
1 голос
/ 29 апреля 2020

У меня вопрос к дизайну приложения. У меня есть приложение для электронной коммерции, которым пользуются 9 клиентов. У каждого клиента одна и та же копия приложения с разным шаблоном внешнего интерфейса. Приложение разработано под laravel и обновляется на каждом клиентском сервере, чтобы быть в курсе. Таким образом, каждое приложение имеет один и тот же бэкэнд («движок»), один и тот же дизайн базы данных и т. Д. c.

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

Я думал о добавлении отдельной таблицы в базу данных, чтобы сохранить там конфигурацию всех полей - как карту столбцов таблицы. Поэтому, когда приложение используется, контроллер вызывает таблицу конфигурации, чтобы получить список полей и просмотреть их в поле зрения.

+---+---------------+-------------------+------------+
|id |controller     | field_name        |field_type  |
+---+---------------+-------------------+------------+
| 1 | products      | price_retail      | integer    |
| 2 | manufacturers | name              | varchar    |
| 3 | manufacturers | logo              | varchar    |
| 4 | manufacturers | custom_for_client | integer    |
+---+---------------+-------------------+------------+

Это действительно - хорошая идея?

1 Ответ

1 голос
/ 29 апреля 2020

Не зная точно, что вы планируете делать с этими "полями", я могу только делать предложения.

Рассматривали ли вы использование столбца json для хранения данных для неприменимых полей всем пользователям?

Миграция базы данных

...
$table->json('meta')->nullable();
...

Модель

...
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        ...
        'meta' => 'array',
        ...
    ];
...

После этого вы можете получить доступ к полям "внутри этого json объекта, например, так:

$model->meta['column'];

или итерации, затем так:

collect($model->meta)->each(function ($column) {});

https://laravel.com/docs/7.x/eloquent-mutators#array -and- json -casting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...