我想在插入数据库之前创建某种数据复制检查。
//@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 :(得分: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;