code: public static function populateRecord($record, $row)
      {
          $columns = array_flip($record->attributes());
          foreach ($row as $name => $value) {
              if (isset($columns[$name])) {
                  $record->_attributes[$name] = $value;
              } elseif ($record->canSetProperty($name)) {
                  $record->$name = $value;
              }
          }
          $record->_oldAttributes = $record->_attributes;
          $record->_related = [];
          $record->_relationsDependencies = [];
      }
docs: Populates an active record object using a row of data from the database/storage.
  
  This is an internal method meant to be called to create active record objects after
  fetching data from the database. It is mainly used by [[ActiveQuery]] to populate
  the query results into active records.
  
  When calling this method manually you should call [[afterFind()]] on the created
  record to trigger the [[EVENT_AFTER_FIND|afterFind Event]].
  
  @param BaseActiveRecord $record the record to be populated. In most cases this will be an instance
  created by [[instantiate()]] beforehand.
  @param array $row attribute values (name => value)