/** * Populates joined relations from [[join]] array. * * @param ActiveRecord $model * @param array $row */ public function populateJoinedRelations($model, array $row) { foreach ($row as $key => $value) { if (empty($this->join) || !is_array($value) || $model->hasAttribute($key)) { continue; } foreach ($this->join as $name) { if ($model->isRelationPopulated($name)) { continue 2; } $records = []; $relation = $model->getRelation($name); $relationClass = $relation->modelClass; if ($relation->multiple) { foreach ($value as $item) { $relationModel = $relationClass::instantiate($item); $relationModelClass = get_class($relationModel); $relationModelClass::populateRecord($relationModel, $item); $relation->populateJoinedRelations($relationModel, $item); $records[] = $relationModel; } } else { $relationModel = $relationClass::instantiate($value); $relationModelClass = get_class($relationModel); $relationModelClass::populateRecord($relationModel, $value); $relation->populateJoinedRelations($relationModel, $value); $records = $relationModel; } $model->populateRelation($name, $records); } } }