0

seq是 DB 表中的整数列。

我想要一个 CActiveRecord 派生类,它可以seq=MAX(seq)+1在 SQL 中创建新记录,并且不会seq在更新现有记录时修改列。

如何?

4

1 回答 1

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

我不确定coalesce其他 DBMS 是否支持该功能。

于 2013-10-21T08:43:58.163 回答