Я бы решил на основании следующих факторов:
1.Количество доступных значений:
Если это просто набор из 2 или 3 предопределенных значений, таких как приоритеты High
, Medium
, Low
.. Я бы предпочел иметь его в кодовой базе в качестве констант,Поскольку маловероятно, что будут добавлены какие-либо новые опции, такие как very low
или very very low
и т. Д.
Если значения заданы заранее, но имеют большое количество, например, возможно, наборы навыков сотрудника. Я бы определенно поместил его втаблица базы данных.
2.Возможность изменения значений:
Если эти значения часто меняются и вы хотите передать управление пользователю, возможно, через административную панель для управления этими значениями, обязательно сохраните их в таблице базы данных.
3.Частота использования:
Если эти значения являются ядром вашей системы и используются почти во всех запросах для фильтрации результатов, то вам также необходимо учитывать производительность:
Например: допустим, весь проект зависит от приоритетов High
, Medium
, Low
.Вам нужно отфильтровать почти каждый запрос, используя приоритеты:
Если у констант будет priority
, хранится в таблице tasks
:
$tasks = Task::whereIn('priority', [high_constant, low_constant])->get();
Имеется отдельная таблица priorities
иотношения с tasks
с использованием priority_id
внешнего ключа имеют:
$task = Task::whereHas('priority', function($q){
return $q->whereIn('priority_name', ['high', 'low']);
})->get();
В зависимости от количества имеющихся у вас данных и частых запросов, вы можете проверить, что влияет на производительность.Если разница очень мала, я бы предпочел константы с пунктами 1 и 2.
4.Кроме того, например, получение идентификатора:
Допустим, у вас есть страница для создания новой задачи с выпадающим списком приоритетов.
Если у вас есть отдельная таблица, вам потребуется получить идентификатор этого приоритета из таблицы priorities
, чтобы сохранить его как внешний ключ при сохранении задачи в таблице tasks
.(На самом деле это не так уж сложно, но стоит упомянуть)
Если у вас есть константа, вы можете сохранить это значение напрямую.
Каждый из них имеет свои плюсы и минусы, я бы сделал свой выбор в основномв пунктах 1 и 2 выше.
Кроме того, если вы создаете константы, я бы предложил создать laravel фасад с псевдонимом, а затем определить в нем константы.Таким образом, вы можете использовать его как в своем проекте
Priority::HIGH
или Priority::LOW