YII + beforeSave()+从表行获取最大值

时间:2011-05-04 00:13:35

标签: save yii max

我正在努力以这种方式在Yii Framework中获得我的beforesave:

当用户发送表单时,beforesave()应该在名为'order'的列中获取最高数字,并将order + 1的值插入当前'order'字段。

在这里花了几个小时阅读帖子后我设法编译了这个东西:

 public function beforeSave()

 {

   if (parent::beforeSave())
   {

        if($this->isNewRecord)
        {

             $criteria->select='max(order) as myMaxOrder';

             $get_it= new CActiveDataProvider(get_class($this), 
             array('criteria'=>$criteria,));

             $got_it=$get_it->getData();

             $whatweneed=$got_it[0]['myMaxOrder'];

             $this->order=(int)$whatweneed+1;

        }

        return true;
    }
    else
    return false;
 }

代码从“顺序”获取MAX,但我真的不知道如何正确处理YII的getData()方法,所以我var_dumped它,看到我在看的东西,但我仍然没有知道除了做

之外如何访问这个值
 $whatweneed=$got_it[0]['myMaxOrder'];

你能告诉我怎么做对吗?

1 个答案:

答案 0 :(得分:9)

如果您设置了数据库,以便订单id是主键(它应该已经存在),只需将其设置为" Auto Increment"。如果您的主键(id)上设置了自动增量,那么当save()没有id的Yii中的模型时,它会自动保存id更高一个比最大你根本不需要在beforeSave()做任何事情!它是免费功能。

但也许我完全误解了你的问题。由于某种原因,这可能不是自动递增的主键列。在这种情况下,这样的事情应该有效(假设你的模型是Order,你的列也因为某种原因被称为" order"):

$maxOrderNumber = Yii::app()->db->createCommand()
  ->select('max(order) as max')
  ->from('order')
  ->queryScalar();
$this->order = $maxOrderNumber + 1;
祝你好运!