【问题标题】:YII + beforeSave() + getting max value from a table rowYII + beforeSave() + 从表格行中获取最大值
【发布时间】:2011-05-04 00:13:35
【问题描述】:

我正在努力让我在 Yii 框架中的 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'];

你能告诉我怎么做吗?

【问题讨论】:

    标签: save yii max


    【解决方案1】:

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

    但也许我完全误解了你的问题。由于某种原因,这可能不是一个自动递增的主键列。在这种情况下,这样的事情应该可以工作(假设您的模型是 Order,并且由于某种原因,您的列也称为“order”):

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

    祝你好运!

    【讨论】:

    • 嗨,Thaddeusmt!非常感谢您的解释,您回答的第二部分是我想要实现的。它应该是 jQuery.sortable UI 的“排序”机制的一部分,允许用户以特定顺序拖放
    • 元素。现在像魅力一样工作:) 再次感谢!
  • 嗯,这是有道理的,存储排序顺序。很高兴我能帮忙!
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签