我在 Cakephp 2.4.7 中实现的解决方案是创建一个带有一个 auto_incremental 类型字段的表
CREATE TABLE `unique_counters` (
`counter` int(11) NOT NULL AUTO_INCREMENT,
`field` int(11) NOT NULL,
PRIMARY KEY (`counter`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后我创建了一个 php 函数,以便每次插入新记录时,读取生成的 id 并立即删除它。
Mysql 保持其内存计数器状态。在您重置 mysql 计数器或运行 TRUNCATE TABLE 操作之前,生成的所有数字都是唯一的
在Cakephp中创建的Model下面找到全部实现
App::uses('AppModel', 'Model');
/**
* UniqueCounter Model
*
*/
class UniqueCounter extends AppModel {
/**
* Primary key field
*
* @var string
*/
public $primaryKey = 'counter';
/**
* Validation rules
*
* @var array
*/
public $validate = array(
'counter' => array(
'numeric' => array(
'rule' => array('numeric'),
//'message' => 'Your custom message here',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
),
);
public function get_unique_counter(){
$data=array();
$data['UniqueCounter']['counter']=0;
$data['UniqueCounter']['field']=1;
if($this->save($data)){
$new_id=$this->getLastInsertID();
$this->delete($new_id);
return($new_id);
}
return(-1);
}
}
任何对结果所属范围的检查都可以在同一函数中通过操作获得的结果来实现