Нужно изменить статус в нескольких моделях.
Есть модели "марка", "модель", "серия", "модификация". При изменении статуса ("активно", "блокировано") в модели "марка" нужно чтобы изменились статусы в остальных моделях.
В gridView на колонке "статус" висит обработчик ajax запроса, который меняет статус.
Код: Выделить всё
public function actionUpdateStatusMark()
{
$id = Yii::$app->request->post('id');
$model = CarMark::find()->where('id_car_mark=:id', [':id' => $id])->one();
$model->status = $model->status == 0 ? 1 : 0;
$model->save();
return $model->status;
}
Код: Выделить всё
public function afterSave($insert, $changedAttributes)
{
CarModel::setStatusModel($this->id_car_mark, $this->status);
parent::afterSave($insert, $changedAttributes);
}
Но для остальных моделей не получается поменять статус.
Изначально методы, которые меняют статус выглядели так
Код: Выделить всё
public static function setStatusSerie($id, $status)
{
$models = CarModel::find()->where('id_car_model=:id', [':id' => $id])->all();
foreach($models as $model){
$model->status = $status;
$model->update();
}
}
Код: Выделить всё
public static function setStatusModel($id, $status)
{
self::updateAll(['status' => $status], 'id_car_mark=:id', [':id' => $id]);
}
Я попытался создать событие в модели, чтобы вызвать методы обновление статусов у других моделей.
На этом всё... Ничего не получается.
Выглядит это примерно так:
в модели "Model"
Код: Выделить всё
const AFTER_UPDATE = 'afterUpdate';
public function init()
{
parent::init(); // TODO: Change the autogenerated stub
$this->on(self::AFTER_UPDATE, function (){
CarSerie::setStatusSerie($this->id_car_model, $this->status); // меняет статус у серии.
});
}
public function afterUpdate()
{
$this->trigger('afterUpdate');
}
Код: Выделить всё
public function afterSave($insert, $changedAttributes)
{
CarModel::setStatusModel($this->id_car_mark, $this->status);
$carModel = new CarModel();
$carModel->afterUpdate();
parent::afterSave($insert, $changedAttributes);
}
Как правильно решить задачу? Можно ли вызывать статические методы по событию?