YII + beforeSave () + получение максимального значения из строки таблицы - PullRequest
2 голосов
/ 04 мая 2011

Я изо всех сил стараюсь, чтобы мой предварительный сохранение в Yii Framework работал следующим образом:

когда пользователь отправляет форму, 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 из 'порядка', но я действительно не знал, как правильно обращаться с методом getData () в YII, поэтому я var_dumped и увидел, что то, что я искал, было там, но я до сих пор не знаю знать, как получить доступ к этому значению, кроме

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

Не могли бы вы сказать мне, как это сделать правильно?

1 Ответ

9 голосов
/ 04 мая 2011

Если вы настроили свою базу данных таким образом, чтобы Заказ id был Первичным ключом (он должен быть в любом случае), просто установите для него значение « Автоинкремент ». Если для вашего первичного ключа установлено значение «Автоинкремент» (id), то при save() модели в Yii без id она будет автоматически сохранена с id, значение которого выше максимального значения. Вам не нужно ничего делать в beforeSave()! Это бесплатная функциональность.

Но, возможно, я совершенно не понимаю ваш вопрос. Возможно, по какой-то причине это не автоинкрементный столбец первичного ключа. В этом случае что-то вроде этого должно работать (при условии, что ваша модель - это Order, а ваш столбец также по какой-то причине называется "order"):

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

Удачи!

...