Здравствуйте! Не раскрыли вы полностью ваш вопрос, но постараюсь ответить, исходя из наших проектов на yii2.
Если используется механизм, при котором файлы можно прикреплять на этапе создания некой модели (скажем Portfolio), и загружаются они сервер посредством ajax-запроса (к примеру 
https://github.com/hayageek/jquery-upload-file), то возникает ситуация, что привязываться то еще не к чему (объект класса Portfolio еще не сохранен), а файлы уже на сервере. На этот случай используем поле hash, значение которого уникально, и именно по нему привязываются файлы. Т.е. при создании нового объекта Portfolio сразу генерируем уникальный hash, передаем его в форму создания, и с ним грузим аяксом файлы. При желании можно повесить cron-задачу для удаления из файловой системы файлов, которые привязаны к несуществующему Portfolio.hash.
Далее, сама модель. Берем официальную документацию: 
https://github.com/yiisoft/yii2/blob/master/docs/g...
Расширяем как нам угодно, например так:
class File extends \yii\db\ActiveRecord
{
    public $file;
    public function rules()
    {
        return [
            [['file'], 'file'],
            [['filename', 'parent_id'], 'required'],
            [['parent_id'], 'integer'],
            [['filename', 'path'], 'string', 'max' => 255],
            [['description'], 'string']
        ];
    }
Далее, в контроллере как себя вести, описано как раз по ссылке выше, но в нашем случае суть такова - для каждой новой модели (об этом чуть позже) получаем сам файл:
$model = new File();
        $model->file = UploadedFile::getInstance($model, 'file');
и назначаем все остальные параметры, будь то parent_id или что-то еще (включая генерацию нового имени для хранения в файловой системе). Далее, если модель проходит валидацию - сохраняем ее в БД и сохраняем файл в файловой системе:
if ($model->file && $model->validate()) {                
            $model->file->saveAs('uploads/' . $model->file->baseName . '.' . $model->file->extension);
        }
Одно уточнение. Если загружать файлы по одному, и только в форме показывать несколько полей, то это решается средствами js, повесить кнопку для создания очередных fileInput с именем File[][file] и textInput File[][description] - проблем не составит. А вот если требуется закинуть их сразу пачкой, то выходов 2 - либо как в указанном по ссылке примере - в одной модели разрешить мультизагрузку, и уже из нее (после валидации) создавать нужные вам модели, либо (что мне кажется логичнее) играться с методом formName(), который будет возвращать нужное имя аттрибута из формы.
Т.е. в базовом случае поля формы имею имена File[file], File[description], File[id]. В нашем же случае получаются такие имена:
File[0][file], File[0][description], File[0][id];
File[1][file], File[1][description], File[1][id];
File[2][file], File[2][description], File[2][id];
Теперь в контроллере в цикле проходим 
foreach (Yii::$app->request->post('File') as $sn => $file){
        $model = new File;
        $model->fakeFormName = "File[{$sn}]";
        $model->file = UploadedFile::getInstance($model, 'file');
    }
В примере выше мы заранее создали свойство $fakeFormName, в которое поместим требуемое для каждого случая базовое имя полей формы и вернем его значение в методе formName(), в таком случае UploadedFile::getInstance($model, 'file') сработает как надо.
Уф, не знаю, насколько доходчиво разъяснил, что-то может потерял в потоке сознания, но думаю основную суть и опорные точки разъяснил. Если что-то непонятно, отпишитесь, я распишу подробнее (проектов на Yii2 много, все включают работу с файлами в той или иной степени, есть разные реализации, в том числе прямо сейчас пишем файловый менеджер для нашей админки на yii2).