Загрузка файлов и сохранение модели

Здравствуйте!

Натолкнулся на проблему, которую не могу понять. Ситуация - есть модель товаров, нужно загружать файлы (т.е. несколько файлов) и хранить пути к ним в базе данных. Для этого в модели создал переменную imageFiles, добавил ее в правила. У этой же модели есть переменная $image, которая будет хранить сериализированный массив с путями к картинкам.

Проблема вот в чем. Я сначала создал метод в модели, в котором обходил загруженные файлы ($imageFiles) и сохранял их, попутно сохраняя путь к каждому файлу в отдельный массив. Затем массив сериализировал и присваивал переменной модели, которая соответствует столбцу в БД. Затем сохранял модель ($model->save()).

В результате - файлы загружаются куда нужно, yii выдает ошибку - no such file or directory, указывая на временный файл.

Все начало работать, когда переписал код таким образом, чтобы сперва сохранять модель, затем сохранять файлы на сервер. Но вышло очень коряво и некрасиво. Приходится дважды обходить один и тот же массив. Вот кусок контроллера…


    public function actionCreate()

    {

        $model = new Goods();

        $categories = $this->listOfCategories();

        if ($model->load(Yii::$app->request->post())) {

            $model->imageFiles = UploadedFile::getInstances($model, 'imageFiles');

            if ($model->validate()) {

                $filePaths=[];

                foreach ($model->imageFiles as $file) {

                    $filePath = '../../common/images/' . $file->baseName . '.' . $file->extension;

                    $filePaths[] = $filePath;

                }

                $model->image=serialize($filePaths);

                if($model->save()){

                     foreach ($model->imageFiles as $file){

                         $filePath = '../../common/images/' . $file->baseName . '.' . $file->extension;

                         $file->saveAs($filePath);

                     }

                }

            }

            else {

                return false;

            }

            return $this->redirect(['view', 'id' => $model->id]);

        } else {

            return $this->render('create', [

                'model' => $model,

                'categories'=>$categories

            ]);

        }

    }

А было (но не работало на сохранение модели) вот так. Привожу кусок модели:


public $filePaths = [];

      public function upload(){

        if ($this->validate()) {

            foreach ($this->imageFiles as $file) {

                $filePath = '../../common/images/' . $file->baseName . '.' . $file->extension;

                $this->filePaths[] = $filePath;

                $file->saveAs($filePath);

            }

            return true;

        }

         else {

            return false;

        }


    }

Далее в контроллере я этот $filePaths сериализировал и присваивал переменной, которая должна быть сохранена в БД.

Вопрос в следующем - почему так? Почему нельзя сначала сохранить файлы, затем получившийся массив с их путями (там уже лежат просто строки) сохранять в БД?

И как вообще эту проблему решают?