Объясните, пожалуйста, почему работает код.
Есть действие в контролере, которое обновляет статус у связанных моделей по цепочке.
Обновить статус надо у марки автомобиля, модели, поколении, серии, модификации и характеристик.
Марка связана с моделью через $id_mark, поколении, серии, модификации связаны через $id_model.
Связь для марки и модели обычная
Код: Выделить всё
public function getModels()
{
return $this->hasMany(CarModel::class, ['id_car_mark' => 'id_car_mark']);
}
Код: Выделить всё
public function actionUpdateStatusMark()
{
$id = Yii::$app->request->post('id');
$model = CarMark::find()
->select(['{{%car_mark}}.id_car_mark','{{%car_mark}}.status'])
->joinWith('models.modification', false)
->where('{{%car_mark}}.id_car_mark=:id', [':id' => $id])
->one();
$model->status = $model->status == 0 ? 1 : 0;
// этот участок будет вынесен в отдельный метод, пока оставил здесь для удобства.
$arr = [];
foreach($model->models as $key => $value){
$arr = array_merge($arr, $value->updModification);
};
$model->save(false,['status']);
CarModel::updateAll(['status' => $model->status], 'id_car_mark=:id', [':id' => $model->id_car_mark]);
CarGeneration::updateAll(['status' => $model->status], ['in', 'id_car_model', $model->models]);
CarSerie::updateAll(['status' => $model->status], ['in', 'id_car_model', $model->models]);
CarModification::updateAll(['status' => $model->status], ['in', 'id_car_model', $model->models]);
CarCharacteristicValue::updateAll(['status' => $model->status], ['in', 'id_car_modification', $arr]);
return $model->status;
}
Код: Выделить всё
CarModel::updateAll(['status' => $model->status], 'id_car_mark=:id', [':id' => $model->id_car_mark]);
Код: Выделить всё
CarGeneration::updateAll(['status' => $model->status], ['in', 'id_car_model', $model->models]);
Но у меня в $model->models не массив id моделей, а объект и по идее должно выдавать ошибку.
Код: Выделить всё
Array
(
[0] => backend\models\CarModel Object
(
[_attributes:yii\db\BaseActiveRecord:private] => Array
(
[id_car_model] => 1
[id_car_mark] => 1
[name] => 378 GT Zagato
[name_rus] => 378 ГТ Загато
[date_create] => 1398979509
[date_update] => 1538517167
[id_car_type] => 1
[status] => 0
)
// остальные данные