我正在努力通过这种方式在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;
}
Run Code Online (Sandbox Code Playgroud)
代码从'order'获取MAX,但我真的不知道如何正确处理YII的getData()方法,所以我var_dumped它,看到我在看的东西,但我仍然不知道如何除了做之外,访问这个值
$whatweneed=$got_it[0]['myMaxOrder'];
Run Code Online (Sandbox Code Playgroud)
你能告诉我怎么做对吗?
如果您设置数据库以使Order 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;
Run Code Online (Sandbox Code Playgroud)
祝好运!
| 归档时间: |
|
| 查看次数: |
11143 次 |
| 最近记录: |