2011-03-23 32 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;