我正在努力以这种方式在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'];
你能告诉我怎么做对吗?
答案 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;
祝你好运!