gpt4 book ai didi

php - 更新或检索数据库中行的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 22:48:07 25 4
gpt4 key购买 nike

我引用了 Wordpress 的数据库来为我在 Laravel 中的应用程序创建配置设置。我创建了一个 app_settings 表,其中包含 idsetting_namesetting_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": "local@host.com",
"created_at": "2015-03-09 10:40:35",
"updated_at": "2015-03-11 03:23:48"
}
]

案例一:

每当我必须使用一个变量时,我必须记住列索引以获取它的值。例如。 $settings[0]['setting_value'] 检索 Title,这使得代码比使用类似 $settings['site_name']

案例二:

如果我必须一次更新多个设置,我必须使用带有 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" : "local@host"
}]

最佳答案

您遇到了使用 EAV 数据库结构的基本问题(尽管您的问题可能更准确地描述为行建模)http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model

这种类型的数据结构从来都不容易查询或更新,我建议您放弃它,只为每个配置变量创建一个包含列的配置表。在某些时候,您将定义所有需要的设置,以便为它们构建表。如果您以后想要添加另一个配置设置,则只需将列添加到表中即可。

也就是说,如果您坚持使用 EAV,那么让您的代码将结果转换成更有用的东西:

$config = new \stdClass;
foreach($result as $row){
$config->$row['setting_name'] = $row['setting_value'];
}

$title = $config->site_title;

关于php - 更新或检索数据库中行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28978237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com