2011-03-23 2 views
1

데이터베이스에 삽입하기 전에 어떤 종류의 데이터 중복 검사를 만들고 싶습니다.젠드의 테이블에서 데이터 중복을 검사하는 제네릭 함수

//@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로이 클래스를 만들고 오랜 세월을 사용했다. 이제 젠드에서 일할 때 최상의 솔루션을 찾고 있습니다. 따라서이 프로젝트를 사용하여 프로젝트에서 사용할 수 있습니다.

도움 주셔서 감사합니다.

+0

왜 db를 고유하게 설정하지 않습니까? – opHASnoNAME

답변

1

나는 doctrine을 사용하여 이렇게했습니다.

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') 
          ); 

를 사용하여 액세스 할 수 있습니다. 하지만 그럴 수 있는지 모르겠다 ...

0

Zend_Db_Table_Abstract을 확장하는 모델에 넣은 다음 기본적으로 데이터 배열과 함께 where 절을 사용하여 테이블에서 select 쿼리를 실행합니다. 테스트되지는 않았지만 :

관련 문제