Я ссылался на базу данных Wordpress, чтобы создать настройку конфигурации для своего приложения в Laravel. Я создал таблицу app_settings
с id
, setting_name
и setting_value
в качестве столбцов для хранения каждого имени и значения конфигурации в строках. Он работает нормально, но проблема возникает всякий раз, когда я извлекаю или обновляю данные.Каков наилучший способ обновления или извлечения строк в базе данных?
$appsetting = new AppSetting();
return $appsetting->all();
Когда я запрос к базе данных он возвращает мне JSON как:
[
{
"id": 37,
"setting_name": "site_name",
"setting_value": "Title",
"created_at": "2015-03-09 10:40:35",
"updated_at": "2015-03-11 03:23:48"
},
{
"id": 38,
"setting_name": "site_url",
"setting_value": "http://localhost:800",
"created_at": "2015-03-09 10:40:35",
"updated_at": "2015-03-11 03:23:48"
},
{
"id": 39,
"setting_name": "site_admin",
"setting_value": "[email protected]",
"created_at": "2015-03-09 10:40:35",
"updated_at": "2015-03-11 03:23:48"
}
]
Случай 1:
Всякий раз, когда я должен был использовать переменную я должен был помнить индекс столбца, чтобы получить его стоимость. Например. $settings[0]['setting_value']
, чтобы получить Title
, и это сделает код довольно статичным, чем использование чего-то вроде $settings['site_name']
.
Случай 2:
Если бы мне пришлось обновить несколько параметров сразу, мне пришлось использовать несколько команд обновления с where
пункта.
$appsetting::where('setting_name', '=', 'site_name')->update(['setting_value' => $setting['title']]);
$appsetting::where('setting_name', '=', 'site_url')->update(['setting_value' => $setting['url']]);
$appsetting::where('setting_name', '=', 'site_admin')->update(['setting_value' => $setting['email']]);
Каков наилучший способ обновления или извлечения строк в базе данных в этом случае?
Я хочу вывод, как это в то время, используя атрибуты, как site_title
в строках
[{
"site_title" : "Title",
"site_url" : "http://localhost",
"site_admin" : "[email protected]"
}]
Там нет никакого способа вокруг с помощью нескольких команд, чтобы обновить кучу разных записей, поскольку каждое обновление опирается на уникальную информацию rmation - имя параметра и значение для этого параметра. Вы можете создать массив с настройками и значениями и использовать цикл foreach для обновлений, это довольно просто. –
@RogerHalliburton Массирование массивов было тем, чего я пытался избежать в первую очередь. Кажется, мне лучше придерживаться таблицы с колонами, чем строк, и, возможно, создать столбец типа 'settings_extras' для хранения json для часто изменяющихся атрибутов/значений. –
Сохранение атрибутов/значений в json имеет серьезные недостатки, если вы когда-либо захотите запросить эту информацию.Это также не помогает с вашим отвращением к массиву, поскольку вам все еще нужно работать с массивом для генерации json, и это только ухудшается, если вы хотите добавить дополнительные настройки в будущем. –