2011-03-23 35 views
1

我想在插入数据库之前创建某种类型的数据重复检查。通用函数检查zend中表中的数据重复

//@param string $table 
//@param Array $columnArray 
//ie.Array(firstColumnName=>$firstData, secondColumnName=>$seconddata) 
//@return 
function isRecordExist($table, $columnArray) 
{ 


return true; // if record exist in mentioned columns 

} 

它只是虚拟实现。我正在寻找一些通用的实现,我可以将其作为全局函数放置,并且可以在zend项目的所有模块中访问。

作为一个专家,可以在任何你指导我什么是创建这个功能,在如此,这将是无处不在访问的最佳途径。

我已阅读Zend_Validate_Db_NoRecordExists,它可以在表单装饰的元件一起使用。但在上述情况下,我们如何创建类,以便在插入之前验证数据(在多列中)。

我创建这个类在PHP和使用多年。现在,当我在zend工作时,我正在寻找最佳解决方案,以便我可以创建这些组件以在我的项目中使用。

感谢您的帮助。

+0

为什么不在你的数据库中设置唯一的列? – opHASnoNAME 2011-03-24 11:45:21

回答

1

我做了这样的使用原则。

class mylib_Validate_isRecordExist 
{ 

    public function isRecordExist($modelClass, $column = array()){ 

     if(empty($modelClass) || empty($column)){ 
      return true; 
     } 

     foreach ($column as $k=>$v){ 
      $where .= ((empty($where))? "" : " AND ") . $k . " = '" . $v . "'"; 
     } 

     $q = Doctrine_Query::create() 
      ->select('t.*') 
      ->from($modelClass . ' t') 
      ->where($where); 
     $records = $q->execute()->count(); 
     return ($records==0) ? false : true; 

    } 
} 

,然后访问它使用

$isRecordExist = mylib_Validate_isRecordExist::isRecordExist(
          'campaignManagement_Model_registrant', 
          array('email'=>'[email protected]', 'postcode'=>'abcdddd') 
          ); 

我相信必须有这Zend的整合更好的办法。但不知道这可能是...

0

把它放进延伸Zend_Db_Table_Abstract然后使用where子句与所述数据阵列基本上运行在表上选择查询的模型。没有测试,但:

$this->select()->from($table, array('id')); 
foreach ($columnArray as $key => $value) 
     $select->where($key.' = ?', $value); 
$res = $select->limit(1)->query()->fetchAll(); 
return empty($res)?false:true;