예제 #1
0
 /**
  * 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);
         }
     }
 }