用于检查zend中表中数据重复的通用函数

时间:2011-03-23 17:14:48

标签: zend-framework

我想在插入数据库之前创建某种数据复制检查。

//@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工作时,我正在寻找最佳解决方案,以便我可以创建这些组件以在我的项目中使用。

感谢您的帮助。

2 个答案:

答案 0 :(得分: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'=>'test@test', 'postcode'=>'abcdddd')
                            );

我相信必须有更好的方法将其整合到zend中。但不知道那可能是......

答案 1 :(得分:0)

将其放入扩展Zend_Db_Table_Abstract的模型中,然后基本上使用带有数据数组的where子句在表上运行select查询。没有测试但是:

$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;