gpt4 book ai didi

php - 将相同的元数据插入多个表的相同列时,如何减少重复代码?

转载 作者:可可西里 更新时间:2023-11-01 07:39:59 24 4
gpt4 key购买 nike

我的目标:

  • 遵循数据库规范化。
  • 能够跟踪我的表格中的更改。
  • 能够从给定的状态恢复我的数据库状态时间点,例如上个月。
  • 将处理数据的代码分开,以便输入可以来自 HTML 表单或其他语言 (Ruby/perl) 的脚本。

为了实现这一点,我选择了像这个答案中描述的那样的数据库设计:

StackOverflow: Is there a MySQL option/feature to track history of changes to records?

但是,当用户更新多个字段时,必须将相同的元数据插入到包含相同列的多个表中,并且我的代码变得重复。

示例:

用户通过 HTML 表单提交数据。PHP 在 Propel ORM 的帮助下处理如下数据。

function insertEvent($name, $venueId, $user, $date, $id = 0) {
//validation and formatting..
//if id == 0, new event,
//else, this is an update, archive the old database row on successful processing and maintain a common id as a parent
//...
$event = new Event();
$event->setName($name);
$event->setVenueId($venueId);
$event->setUser($user); //1
$event->setValidFrom($date); //1
$event->setValidUntil(null); //1
$event->save();
// ...
}

function insertEventPhonenumber($phonenumber, $pid, $user, $date, $id = 0) {
//...
$event_phonenumber = new EventPhonenumber();
$event_phonenumber->setPid($pid); //2
$event_phonenumber->setPhonenumber($phonenumber);
$event_phonenumber->setUser($user); //2
$event_phonenumber->setValidFrom($date); //2
$event_phonenumber->setValidUntil(null); //2
$event_phonenumber->save();
// ...
}

function insertEventArtistId($artistId, $pid, $user, $date, $id = 0) {
//...
$event_artistId = new EventArtistId();
$event_artistId->setPid($pid); //3
$event_artistId->setArtistId($artistId);
$event_artistId->setUser($user); //3
$event_artistId->setValidFrom($date); //3
$event_artistId->setValidUntil(null); //3
$event_artistId->save();
// ...
}

我的问题:

在我的完整代码中,受影响的表比示例中的三个表更多。

标有//1、//2 和//3 的数据输入通常是相同的。

在我的胃里,我不喜欢这样。我一直在尝试使用搜索引擎查询“SQL 中的公共(public)列在多个表上插入查询”和措辞的变体,但没有找到与我的问题直接相关的任何内容。

我觉得这种不好的做法吗?

如何最大限度地减少代码中的重复?

最佳答案

您是否要摆脱所有这些功能?如果是这样,您可以使用 call_user_func 来消除大部分代码。

<?php
class MyApp {


static function insert($name, $params) {
$ob = new $name();
foreach($params as $k=>$v) {
$op = array($ob,"set".ucfirst($k));
//if (is_callable($op)) {
call_user_func($op,$v);
//}
}
$ob->save();
}

}

MyApp::insert(
"EventArtistId",
array(
"pid"=>$_REQUEST['pid'],
"artistId"=>$_REQUEST['artistId'],
"user" => $_REQUEST['user'],
"validFrom" => $_REQUEST['date'], // may need to convert date
"validUntil" => isset($_REQUEST['validUntil']) ? $_REQUEST['validUntil'] : null,
)
);

// More cool
// MyApp::insert($_REQUEST['action'],$_REQUEST['params']);

?>

关于php - 将相同的元数据插入多个表的相同列时,如何减少重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155961/

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