2011-03-27 74 views
0

我想有一个自定义函数insert/edit/delete来自database的记录,而不是 必须写每个页面的单个查询。数据输入抽象层?

我也曾想过这样进行:

//page.php: 

$datainput = new DataInputAbstraction(); 
$datainput->setTableName = 'portal'; 
$datainput->setAllowedFields = array('name'=>'defaultvalue','text'=>'','desc'=>''); 

$datainput->run(); 

// DataInputAbstraction.class.php: 

class DataInputAbstraction{ 
//> attr  
public function run(){ 
    if (isset($_POST['action']) && $_POST['action']=='insert') { 
     $filteredData = array_intersect_key($this->allowedFields,$_POST); 
     //> Do a mysql query to insert $filteredData to $this->table 
    } 
    //> Do other stuff if $_POST['action'] == 'edit' | 'del' 
}  
} 

基本方法run()的基础上$ _ POST [ '行动']执行正确的行动。

过滤器表现为做一个intersect_key与属性allowedFileds,之后,它建立的查询

不必要的变量

INSERT INTO $this->tableName (array_keys($field)) VALUES (array_values($field))(伪)

你认为这是前进的好办法?有更好的方法或PHP提供了一个类似的内置功能?

感谢

+1

真的值得重新发明轮子吗?尝试[RedBean](http://redbeanphp.com/#/Tutorial),一个非常棒的ORM图层。 – 2011-03-27 19:00:30

+0

嗯,我真的很喜欢它,并在我的项目中使用它。它从未如此简单:)但如果你有很多时间在你的手上 - 为什么不创造一些东西......或许更好.. – 2011-03-27 19:14:51

+0

@Briedis DAL!= ORM – 2011-03-28 14:59:16

回答

1

在我看来,如果你不想用的东西,是已经在那里(红豆是一个非常不错的选择BTW),那么你将是很好的进行这一点。

我总是喜欢尽可能多的抽象,因为它使您无法做出关于要使用什么服务的艰难决定。例如,如果稍后更改数据库提供程序,您将创建一个数据抽象层来处理所有数据事务,唯一需要重新编码的是数据抽象类。

所以,我认为这是个好主意。我唯一的建议是确保你坚持DRY原则,并保持抽象层非常模块化。使用抽象层的代码不应该知道它是如何工作的,只是它提供了所需的数据。

希望有所帮助。

0

它永远不会工作,因为您必须为插入和更新设置不同的字段集。

然而,这个想法本身是不够好,并在

$datainput = new DataInputAbstraction(); 
$datainput->setTableName = 'portal'; 

if ($action=='insert'){ 
    $datainput->setAllowedFields = array('name','text','desc','timestamp'); 
} elseif ($action=='update'){ 
    $datainput->setAllowedFields = array('name','text','desc'); 
    $datainput->setWhereConditions = array('id' => $_POST['id']); 
} 
$datainput->run($action); 

形式会好起来的。

但是,我自己更喜欢普通的SQL对一些抽象

+0

感谢您的帮助,我忽略了一些类似于where clausle的detalis,但那里是。对于插入更新之间的区别,我可以在使用方法查询之前轻松地编辑它们 – dynamic 2011-03-28 15:13:11