概述:
我已经在每个使用Slim 3的项目中创建了一个适合我需求的仪表板框架。我想要实现的功能之一是工作台功能。这可以创建具有用户可以包括的小部件的多个工作台。 (统计,单数据[计数],表数据等。)
数据库表格结构:
前端视图
要生成递归数据,必须至少有几个工作台。
说了这么多,就是为了让大家了解如何根据用户体验生成数据。我也担心数据的速度会以某种方式被保存或删除。
现在将工作台存储在我的数据库中我正在调用控制器的方法。
public function saveWorkBench($request, $response, $args, $workbench_parent_id = 0, $workbenches = []) {
if ($workbench_parent_id == 0 && empty($workbenches)) {
$this->auth->user()->userWorkbench()->delete();
$workbenches = $request->getParam('workbenches');
}
foreach ($workbenches as $workbench) {
$this->auth->user()->userWorkbench()->create([
'workbench_id' => $workbench['workbench_id'],
'workbench_parent_id' => $workbench_parent_id,
'layout_type' => $workbench['layout_type']
]);
if (!empty($workbench['workbenches'])) {
$this->saveWorkBench($request, $response, $args, $workbench['workbench_id'], $workbench['workbenches']);
}
}
}
我在这里做的就是每当我保存工作台时。我删除了所有用户工作台(按保存/删除工作台的用户截断)。然后使用递归方法再次循环以获取用户生成的相同数据。
问题是,这可以接受吗?我觉得再次截断和循环并不好,但我已经在很多数据中使用了这种方法几次。
如果这是不可接受的,那么任何解决方案/建议对我来说都是好方法吗?我一直以为我会更新/删除特定的工作台,但我不知道该怎么做。
答案 0 :(得分:1)
首先,递归调用控制器动作似乎不是一个优雅的解决方案。移动您的"保存工作台树"单独模型中的逻辑。
其次,性能方面,更新更改而不是完全删除和重新创建树更好。但它真的取决于你,这主要取决于数据量是否很大以及此操作的频率是否很高。如果不是,请将其保留原样。 "过早的优化是所有邪恶的根源(c)Donald Knuth"。 还有一件事,请确保在单个事务中执行所有数据库查询。