Вопрос про мультизагрузку load для модели

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

Вопрос про мультизагрузку load для модели

Сообщение Alert230 »

Добрый день!
Простой код из контроллера:

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

    public function actionUpdate($id)
    {
        $model = $this->findModel($id);
        if ($model->load(Yii::$app->request->post()) && $model->validate()) { }
        .............
   }
Если мы исполним action поменяв на форме поле $model-status и распечатаем $model в контроллере, то увидим:
frontend\modules\nptf\models\HouseModel Object
(
[lastWeightModel] =>
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id] => 29
[title] => Объект 777
[cut_title] => 777
[type] => 0
[status] => 2
)

[_oldAttributes:yii\db\BaseActiveRecord:private] => Array
(
[id] => 29
[title] => Объект 777
[cut_title] => 777
[type] => 0
[status] => 0
)
В распечатке видно, что status теперь имеет другое значение.
У меня вопрос. А можно эти измененные аттрибуты как нибудь получать, каким нибудь методом yii из коробки? или всё таки парсить?
PS: я сначала подумал на dirty-аттр/методы, но при операции $model->load -- ВСЕ аттрибуты считаются новыми. Этот вариант не подходит
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

Re: Вопрос про мультизагрузку load для модели

Сообщение Alert230 »

функция покажет одинаковый результат, не зависимо от того - менялся ли status или нет.
Мне нужно отследить именно то, что значение после массовой загрузки отличается от значения в БД.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Вопрос про мультизагрузку load для модели

Сообщение ElisDN »

Alert230 писал(а): 2018.12.10, 08:42 но при операции $model->load -- ВСЕ аттрибуты считаются новыми.
Потому что из формы приходят строки status=>'2' вместо чисел status=>2.
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

Re: Вопрос про мультизагрузку load для модели

Сообщение Alert230 »

такой код в activeForm

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

            echo  $form->field($model, 'status')->label('Изменить статус')->dropDownList([
                0 => 'Не работает',
                2 => 'Сервис'
            ]);
генерирует такой HTML:

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

<select id="housemodel-status" class="form-control" name="HouseModel[status]" aria-invalid="false">
<option value="0" selected="">Не работает</option>
<option value="2">Сервис</option>
</select>
Глупо наверное спрашивать, а вообще можно в POST запросе передать int (а не string) ? или нужно как то костылить? Или как лучше поступить?
Alert230
Сообщения: 56
Зарегистрирован: 2018.03.09, 13:34

Re: Вопрос про мультизагрузку load для модели

Сообщение Alert230 »

Большое спасибо, всё реализовал.
Ответить