seq
是 DB 表中的整数列。
我想要一个 CActiveRecord 派生类,它可以seq=MAX(seq)+1
在 SQL 中创建新记录,并且不会seq
在更新现有记录时修改列。
如何?
seq
是 DB 表中的整数列。
我想要一个 CActiveRecord 派生类,它可以seq=MAX(seq)+1
在 SQL 中创建新记录,并且不会seq
在更新现有记录时修改列。
如何?
由于整个业务逻辑尚不清楚,但从上面的讨论中不知何故,这可能是您的解决方案:
将以下两个函数添加到所需的模型类中,您就完成了!
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;
}
我不确定coalesce
其他 DBMS 是否支持该功能。