seq
是数据库表中的整数列。
我想要一个CActiveRecord派生类,它会在创建新记录时在SQL中执行seq=MAX(seq)+1
,并且在更新现有记录时不会修改seq
列。
如何?
答案 0 :(得分:0)
由于整个业务逻辑尚不清楚,但从上面的讨论中,这可能是您的解决方案:
将以下两个函数添加到所需的模型类中,您就完成了!
public function beforeSave(){
if($this->isNewRecord){
$this->seq=$this->getNextSeq();
}
return parent::beforeSave();
}
public function getNextSeq(){
$maxSeq = $this->findBySql('select max(seq)+1 as seq from ' . $this->tableName(), array());
return (!$maxSeq->seq ? 1 : $maxSeq->seq);
}
只是旁注
如果您使用的是mysql,则可以优化最后一个函数(当表为空时),例如
public function getNextSeq(){
$maxSeq = $this->findBySql('select coalesce(max(seq),0)+1 as seq from ' . $this->tableName(), array());
return $maxSeq->seq;
}
我不确定其他DBMS是否支持coalesce
功能。