Не сохраняет данные данные в модель.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

Здравствуйте! Давно уже не программировал, но нужно сделать. В контроллере категорий я создал экшен для того, что бы при необходимости менять стоимость всех товаров в данной категории сразу на некий процент прямо в БД.
И у меня не получается даже добавлять новый товар там.

Код: Выделить всё

      public function actionRise($id)
      {
          

            $model = $this->findModel($id);

         if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['qwe', 'id' => $model->id]);
        } else {
            
            $tovar = new Tovar();
            $tovar->name = 'Qiang';
            $tovar->save();  
            
            
            return $this->render('rise', [
                'model' => $model, 'tovar' => $tovar
            ]);
        }
        }} 
Почему так может быть?
Потом мне нужно будет использовать updateAll, что бы обновить все товары из этой категории.
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Не сохраняет данные данные в модель.

Сообщение mkramer »

Вангую, rules() в модели не заданы, и поэтому load не обновляет поля
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Не сохраняет данные данные в модель.

Сообщение maleks »

после неработающего save смотрите что за ошибки - var_dump($model->errors)
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

mkramer писал(а):Вангую, rules() в модели не заданы, и поэтому load не обновляет поля
Да, Вы правы! Спасибо.
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

maleks писал(а):после неработающего save смотрите что за ошибки - var_dump($model->errors)
Спасибо! А вы не знаете, как сделать так, что бы при апдэйте значения умножались на какое-либо число?

Код: Выделить всё

//Соединение с базой данных
                $tovar = Yii::$app->db;
            //  меняем стоимость всех товаров из категории
                $tovar->createCommand()->update('Tovar', ['price' => 'price'+2], "category_name = $model->rise")->execute();
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: Не сохраняет данные данные в модель.

Сообщение Onotole »

Так вроде

Код: Выделить всё

$tovar->createCommand()->update('Tovar', new \yii\db\Expression('[[price]] = [[price]] * 2'), "category_name = $model->rise")->execute(); 
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

Onotole писал(а):Так вроде

Код: Выделить всё

$tovar->createCommand()->update('Tovar', new \yii\db\Expression('[[price]] = [[price]] * 2'), "category_name = $model->rise")->execute();
Получается такой запрос О_о

Код: Выделить всё

UPDATE `Tovar` SET `expression`='[[price]] = [[price]] * 2', `params`=NULL WHERE category_name = 123
Он не работает из-за Column not found: 1054 Unknown column 'expression' in 'field list'
Catwill
Сообщения: 7
Зарегистрирован: 2016.02.19, 18:37

Re: Не сохраняет данные данные в модель.

Сообщение Catwill »

FOMINTIMUR писал(а):как сделать так, что бы при апдэйте значения умножались на какое-либо число?
как вариант можно попробовать метод beforeSave модели Tovar:

Код: Выделить всё

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if (!$this->isNewRecord && $this->changePrices) {
            $this->price *= 2;
        }
        return true;
    }
    return false;
}
где

Код: Выделить всё

$this->changePrices = true;

если нужно умножать цены, иначе ложь.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Не сохраняет данные данные в модель.

Сообщение maleks »

FOMINTIMUR писал(а):

Код: Выделить всё

                $tovar->createCommand()->update('Tovar', ['price' => 'price'+2], "category_name = $model->rise")->execute();
Вместо ['price' => 'price'+2], надо:

Код: Выделить всё

['price' => new \yii\db\Expression('[[price]] + 2')]
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

maleks писал(а):
FOMINTIMUR писал(а):

Код: Выделить всё

    $tovar->createCommand()->update('tovar', ['price' => new \yii\db\Expression("[[price]] *$model->rise/100")], "category_name = '$model->name'")->execute();
             
                $tovar->createCommand()->update('Tovar', ['price' => 'price'+2], "category_name = $model->rise")->execute();
Вместо ['price' => 'price'+2], надо:

Код: Выделить всё

['price' => new \yii\db\Expression('[[price]] + 2')]
Спасибо огромное! Так заработало)

Код: Выделить всё

    $tovar->createCommand()->update('tovar', ['price' => new \yii\db\Expression("[[price]] *$model->rise/100")], "category_name = '$model->name'")->execute();
              
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: Не сохраняет данные данные в модель.

Сообщение FOMINTIMUR »

Catwill писал(а):
FOMINTIMUR писал(а):как сделать так, что бы при апдэйте значения умножались на какое-либо число?
как вариант можно попробовать метод beforeSave модели Tovar:

Код: Выделить всё

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if (!$this->isNewRecord && $this->changePrices) {
            $this->price *= 2;
        }
        return true;
    }
    return false;
} 
где

Код: Выделить всё

$this->changePrices = true; 

если нужно умножать цены, иначе ложь.
Спасибо.
Ответить